如何扩展RemoteAttribute以进入ModelState?
问题描述:
模型如何扩展RemoteAttribute以进入ModelState?
[Remote("ValidateDuplicateUsername", "Account", ErrorMessage = "Username is already taken")]
public string Username { get; set; }
控制器
ModelState.IsValid
的RequiredAttribute
自动如果该字段是无效的添加条目ModelState
。 然后它在视图中显示错误消息。
我怎样才能做到这一点使用RemoteAttribute
?所以当我调用ModelState.IsValid时,它也验证远程验证?
答
的RequiredAttribute标签自动添加条目的ModelState如果字段无效
不,你必须有一些误解。 Required属性不会向ModelState添加任何内容。验证属性无权访问ModelState,也不能访问HttpContext。它们重写IsValid方法并返回true或false来指示模型是否有效。它是默认的模型联编程序,它在尝试从添加错误到ModelState的请求中绑定模型时执行验证。数据注释被设计为独立于MVC。他们在一个单独的程序集(System.ComponentModel.DataAnnotations)中,并在WPF,Silverlight ...应用程序中使用它们。所以你明白ModelState的概念没有意义。
所以,如果你看的IsValid实施RemoteAttribute的,你会发现以下内容:
public override bool IsValid(object value)
{
return true;
}
这就是为什么RemoteAttribute认为你的模型是有效的,当你发布形式的原因。您可以编写自定义远程验证属性并覆盖此方法。
“...数据注释被设计为独立于MVC ...”为什么在System.Web.Mvc命名空间中驻留RemoteAttribute?在WPF中,您不使用这种属性。有这个IDataErrorInfo。更好地坚持asp.net mvc Darin ;-) – Elisabeth 2012-05-30 19:30:07
Remote属性是一个特定的ASP.NET MVC验证属性:它使用客户端JavaScript,这在其他应用程序(如WPF)中没有任何意义。 – 2012-05-30 19:31:34
好吧,因为你在上面的赫赫写了你的解决方案。顺便说一句。你是一个问答者:P – Elisabeth 2012-05-30 19:32:30