【问题标题】:How to Extend RemoteAttribute to make Entry to the ModelState?如何扩展 RemoteAttribute 以进入 ModelState?
【发布时间】:2012-01-13 06:44:46
【问题描述】:

型号

[Remote("ValidateDuplicateUsername", "Account", ErrorMessage = "Username is already taken")] public string Username { get; set; }

控制器

ModelState.IsValid

如果字段无效,RequiredAttribute 会自动将条目添加到 ModelState。 然后它会在视图中显示错误消息。

我怎样才能使用RemoteAttribute 来做到这一点?这样当我调用 ModelState.IsValid 时,它也会验证远程验证?

【问题讨论】:

    标签: asp.net asp.net-mvc-3


    【解决方案1】:

    如果字段无效,RequiredAttribute 会自动向 ModelState 添加条目

    不,你一定是误会了什么。 Required 属性不会向 ModelState 添加任何内容。验证属性无权访问 ModelState,也无权访问 HttpContext。它们覆盖 IsValid 方法并返回 true 或 false 以指示模型是否有效。它是默认的模型绑定器,它在尝试从将错误添加到 ModelState 的请求中绑定模型时执行验证。数据注释被设计为独立于 MVC。它们位于一个单独的程序集 (System.ComponentModel.DataAnnotations) 中,目的是在 WPF、Silverlight 等应用程序中使用它们。所以你明白 ModelState 的概念没有意义。

    因此,如果您查看 RemoteAttribute 的 IsValid 实现,您会注意到以下内容:

    public override bool IsValid(object value)
    {
        return true;
    }
    

    这就是为什么 RemoteAttribute 在您发布表单时认为您的模型有效的原因。您可以编写自定义远程验证属性并覆盖此方法。

    【讨论】:

    • "...数据注释被设计为独立于 MVC..." 为什么 RemoteAttribute 驻留在 System.Web.Mvc 命名空间中?在 WPF 中,您不使用这种属性。为此有 IDataErrorInfo。最好坚持使用 asp.net mvc Darin ;-)
    • Remote 属性是一个特定的 ASP.NET MVC 验证属性:它使用客户端 javascript,在 WPF 等其他应用程序中没有任何意义。
    • 好的,因为你在上面的解决方案中写了,呵呵。顺便提一句。你是一个更快的回答者:P
    猜你喜欢
    • 1970-01-01
    • 2020-01-13
    • 2011-11-26
    • 1970-01-01
    • 2014-05-30
    • 2012-12-03
    • 1970-01-01
    • 2014-02-12
    • 1970-01-01
    相关资源
    最近更新 更多