2012-05-05 52 views
2

我有一个Registerlogin页面都使用不显眼的ajax。
在我的模型中Username物业装饰有Remote("ActionName","ControllerName")
它在Registration Page工作正常,但问题是验证在Login Page也工作。所以,我怎么可以禁用对Login PageRemote验证属性,但我确实希望的signInLogin Page AJAX功能,所以我不能删除unobtrusive javascript file解决方法为“远程”属性

回答

1

您无法关闭远程验证动态地。

解决方法是不要在两个视图中使用相同的模型。

而不是创建两个的ViewModels一个用于登录和对寄存器观点和不同的诠释他们:从您的视图模型

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

    //... 
} 

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

    //... 
} 

对于映射属性到模型控制器,你可以使用一些对象,对象映射像AutoMapper

+0

感谢您的快速响应。我猜也一样,但是这样它不断增加ViewModel的数量。这是最佳做法吗?顺便说一句,我已经接受作为答案,但它很好动态关闭远程验证程序 – Vivek

+0

不要担心创建大量的ViewModels,这是使用它们的最佳实践。它有助于分离每个视图都有自己定制的ViewModel以满足其特定需求的问题。就像你在一个页面上的例子一样,你需要在另外一个页面上进行验证。你可以开始阅读关于viewmodels eg [here](http://stackoverflow.com/questions/6157348/when-do-i-use-view-models-partials-templates-and-handle-child-bindings-with-mv )和[这里](http://www.rachelappel.com/use-viewmodels-to-manage-data-amp-organize-code-in-asp.net-mvc-applications)。 – nemesv

+0

关于'Remote':可能(我没有尝试过)使用JavaScript,你可以动态地从你的'input'元素(用来控制验证器)中移除MVC生成的'data-'属性,但是我真的不用不建议采取这种方法。 – nemesv