Mor*_*eza 8 validation asp.net-mvc
我正在使用ASP.NET MVC Razor和Data Annotation验证器我的模型:
public class Person
{
public int id { get; set; }
[Required]
public string FirstName { get; set; }
[Required]
public string LastName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
FirstName和LastName是Requerd.我想编辑FirstName.我的Methode是:
public ActionResult Edit([Bind(Include = "FirstName")]Person person)
{
var p = GetPerson();
if (TryUpdateModel(p))
{
//Save Changes;
}
}
Run Code Online (Sandbox Code Playgroud)
但是TryUpdateModel总是返回false.因为LastName无效.
如何防止在TryUpdateModel中检查LastName的检查?
注意:
Mor*_*eza 17
我找到了Nice Solution.我必须从ModelState中删除未使用的Field.然后ModelState.IsValid返回true.首先我需要Create New Attribute类:
public class ValidateOnlyIncomingValuesAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var modelState = filterContext.Controller.ViewData.ModelState;
var valueProvider = filterContext.Controller.ValueProvider;
var keysWithNoIncomingValue = modelState.Keys.Where( x=>!valueProvider.ContainsPrefix(x) );
foreach (var key in keysWithNoIncomingValue)
modelState[key].Errors.Clear();
}
}
Run Code Online (Sandbox Code Playgroud)
然后我在我的方法上添加属性:
[ValidateOnlyIncomingValuesAttribute]
public ActionResult Edit([Bind(Include = "FirstName")]Person person)
{
var p = GetPerson();
if (ModelState.IsValid)
{
TryUpdateModel(p);
//Save Changes;
}
}
Run Code Online (Sandbox Code Playgroud)
看看这个:http://blog.stevensanderson.com/2010/02/19/partial-validation-in-aspnet-mvc-2/
Pri*_*nka 15
在检查模型是否有效之前,您可以删除不需要的属性
ModelState.Remove("Email");
if (ModelState.IsValid)
{
// whatever you want to do
}
Run Code Online (Sandbox Code Playgroud)
我想出了一个非常简单的解决方案.
public ActionResult Edit(Person person)
{
ModelState.Remove("FirstName"); // This will remove the key
var p = GetPerson();
if (TryUpdateModel(p))
{
//Save Changes;
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15153 次 |
| 最近记录: |