我有一个MVC 3应用程序。 我有一个名为UserModel的模型,其中包含一个电子邮件字段,通过RemoteAttribute进行了唯一验证。我想在2个视图上使用UserModel - EditUser和CreateUser。如何允许在EditUser视图上验证电子邮件字段(因为此字段是只读的),并将其保留在CreateUser视图中?
答案 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学到了这种技巧。他使用该技术验证具有必填字段的模型,但数据条目是一个多步骤向导。如果未在表单发布中返回该值,则会删除该属性的错误。