如何在MVC视图上禁用字段验证?

时间:2011-11-18 12:16:05

标签: .net asp.net-mvc validation

我有一个MVC 3应用程序。 我有一个名为UserModel的模型,其中包含一个电子邮件字段,通过RemoteAttribute进行了唯一验证。我想在2个视图上使用UserModel - EditUser和CreateUser。如何允许在EditUser视图上验证电子邮件字段(因为此字段是只读的),并将其保留在CreateUser视图中?

2 个答案:

答案 0 :(得分:1)

解决此问题的一种好方法是将usermodel id作为adittional字段传递给远程验证方法。这将在创建时为空或null,但在编辑时填充。然后,您可以将逻辑添加到远程验证方法以检查ID 见下面的例子

[Remote("ValidationMethod", "UserModel", AdditionalFields = "Id", ErrorMessage = "Error message")] 

答案 1 :(得分:1)

您可以使用部分验证技术来修改验证结果。此示例将丢弃“电子邮件”字段的任何错误。

public class DontValidateEmailAttribute : ActionFilterAttribute {

  public override void OnActionExecuting(ActionExecutingContext filterContext) {
    var modelState = filterContext.Controller.ViewData.ModelState; 
    var incomingValues = filterContext.Controller.ValueProvider;

    var key = modelState.Keys.Single(x => incomingValues.Equals("Email"));    
    modelState[key].Errors.Clear();

  }
}

并将此属性应用于编辑控制器。

我从Steve Sanderson's Pro ASP NET MVC 3学到了这种技巧。他使用该技术验证具有必填字段的模型,但数据条目是一个多步骤向导。如果未在表单发布中返回该值,则会删除该属性的错误。