使用验证注释在mvc 3中支持多个表单的最佳方法

时间:2012-03-13 10:30:29

标签: asp.net-mvc-3 forms partial-views

在mvc3项目中,我希望在一个页面上有2个表单。一种形式是注册用户,另一种形式是登录。

有两个提交按钮。一个注册,一个注册。

在模型中有验证注释,例如用户名是必填项,密码必须匹配,等等。

问题是,验证注释会相互影响。因此,当按下注册按钮时,登录用户名的验证无效。

我曾尝试编写部分视图,或者在一个视图中执行所有操作,编写一些自定义注释,尊重按下的按钮。

但这一切似乎都错了。这不是最好的解决方案。

实现这一目标的最佳途径是什么。

1 个答案:

答案 0 :(得分:4)

我解决这个问题的方法;您需要2个或更多ViewModel绑定到您的视图,是创建一个包含2个属性的包含ViewModel,然后将单独的登录注册模型分配给每个属性。例如(减去您要添加的任何验证)

public class LogOnViewModel {
    public string UserName { get; set; }
    public string Password { get; set; }
}

public class RegisterViewModel {
    public string UserName { get; set; }
    public string Email { get; set; }
    public string Password { get; set; }
    public string ConfirmPassword { get; set; }
}

public class WelcomeScreenViewModel {
    public LogOnViewModel LogOnModel { get; set; }
    public RegisterViewModel RegisterModel { get; set; }
}

在我的欢迎视图中,我会在顶部显示@model namespace.WelcomeScreenViewModel以及指向_LogOn和_Register的2个部分视图,如下所示:

@Html.Partial("_LogOn", Model.LogOnModel)
@Html.Partial("_Register", Model.RegisterModel)

通过这种方式,您的部分视图会传递正确的模型,并且也可以作为部分视图重复使用,而不是在您的网络应用中。