Asp.net mvc 3 “解决方案”;“远程”;属性

Asp.net mvc 3 “解决方案”;“远程”;属性,asp.net-mvc-3,validation,Asp.net Mvc 3,Validation,我有一个注册和登录页面,这两个页面都使用了不引人注目的ajax。 我的模型中的Username属性用Remote(“ActionName”、“ControllerName”) 它在注册页面中工作正常,但问题是验证也在登录页面中工作。那么,我如何才能禁用登录页面上的远程验证属性,但我确实希望登录页面中的登录的ajax功能,因此我无法删除不引人注目的javascript文件您无法动态关闭远程验证程序 解决方案是不要对两个视图使用相同的模型 不要创建两个viewmodels,一个用于登录,另一个用于注

我有一个
注册
登录
页面,这两个页面都使用了不引人注目的ajax。
我的模型中的
Username
属性用
Remote(“ActionName”、“ControllerName”)


它在
注册页面
中工作正常,但问题是验证也在
登录页面
中工作。那么,我如何才能禁用
登录页面上的
远程
验证属性,但我确实希望
登录页面中的
登录
的ajax功能,因此我无法删除
不引人注目的javascript文件

您无法动态关闭远程验证程序

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

不要创建两个viewmodels,一个用于登录,另一个用于注册视图,并对它们进行不同的注释:

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

    //...
}

public class LoginUserViewModel
{
    public string Username { get; set; }

    //...
}

要将属性从viewmodel映射到控制器中的模型,您可以使用一些对象映射器,如

,感谢您的快速响应。我也猜到了同样的情况,但这样它会不断增加ViewModel的数量。这是最佳实践吗???顺便说一句,我已经接受了这个答案。不过,动态关闭
Remote
validator会很好。不要担心创建大量的视图模型,使用它们是最佳实践。它有助于分离关注点,即每个视图都有自己的定制视图模型,以满足其特定需求。就像你在一个页面上的例子一样,你需要在另一个页面上进行验证,而你不需要。您可以开始阅读有关viewmodels的内容,例如和。关于关闭
远程
:也许(我没有尝试过)使用JavaScript,您可以从
输入
元素(用于控制验证器)中动态删除MVC生成的
数据-
属性,但我真的不建议采用这种方法。