使用MVC 3从不显眼的客户端验证中排除属性

时间:2011-04-12 14:06:22

标签: asp.net-mvc validation

我有一个类User,它有一个Email属性,如:

public class User : Entity
{       
...
    [Display(Name = "Email"), Required(ErrorMessage = "Required."), Remote("EmailExists", "User", ErrorMessage = "Email already in Use.")]
    public virtual string Email { get; set; }
...
}

My View Create适用于所有验证... 但在我看来编辑,我的电子邮件texbox是只读,所以用户无法更改电子邮件...

问题是我的远程验证 EmailExists 一直在触发......

有没有办法在这种情况下排除电子邮件客户端验证?或者可能是另一种解决方案?

由于

3 个答案:

答案 0 :(得分:1)

最佳解决方案是在特定情况下将电子邮件呈现为文本内容(span,p等) - 验证不会触发。这最好用编辑器模板完成。但是如果你不希望,你可以使用一些javascript来删除客户端的规则。看一下Plugins/Validation/rules - 当文本框是只读时你会删除规则。但对我来说,第一种方式是首选方式

答案 1 :(得分:1)

我认为更简单的方法是禁用客户端中的字段而不是使用readonly。验证插件不会考虑已禁用的字段。

答案 2 :(得分:0)

您可以使用不同的ViewModel进行编辑和创建视图,并仅应用Remote属性来查看与create视图关联的模型,或者为与编辑视图关联的视图模型调用其他远程验证逻辑。