【问题标题】:workaround for "Remote" attribute“远程”属性的解决方法
【发布时间】:2012-05-05 07:59:40
【问题描述】:

我有一个 Registerlogin 页面都使用不显眼的 ajax。
我模型中的Username 属性用Remote("ActionName","ControllerName") 装饰
它在Registration Page 中工作正常,但问题是验证也在Login Page 中工作。那么如何禁用Login Page 上的Remote 验证属性,但我确实想要Login PagesignIn 的ajax 功能,所以我无法删除unobtrusive javascript file

【问题讨论】:

    标签: asp.net-mvc-3 validation


    【解决方案1】:

    您不能动态关闭远程验证器。

    解决方案是不要对两个视图使用相同的模型。

    而不是创建两个视图模型,一个用于登录,一个用于注册视图,并以不同的方式注释它们:

    public class RegisterUserViewModel
    {
        [Remote("ActionName","ControllerName")]
        public string Username { get; set; }
    
        //...
    }
    
    public class LoginUserViewModel
    {
        public string Username { get; set; }
    
        //...
    }
    

    要将视图模型中的属性映射到控制器中的模型,您可以使用一些对象-对象映射器,例如 AutoMapper

    【讨论】:

    • 感谢您的快速回复。我也猜到了,但这样它会不断增加 ViewModel 的数量。这是最佳实践吗???顺便说一句,我已经接受了答案。但是最好动态关闭Remote验证器
    • 不要担心创建大量 ViewModel,使用它们是最佳实践。它有助于分离关注点,即每个视图都有自己定制的 ViewModel 以满足其特定需求。就像您在一个页面上的示例一样,您需要在另一个页面上进行验证,而您不需要。您可以开始阅读有关视图模型的信息,例如 herehere
    • 关于关闭 Remote :也许(我没有尝试过)使用 JavaScript,您可以从 input 元素(用于控制验证器)中动态删除 MVC 生成的 data- 属性),但我真的不建议采用这种方法。
    猜你喜欢
    • 1970-01-01
    • 2019-09-08
    • 1970-01-01
    • 1970-01-01
    • 2020-08-31
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多