在mvc3项目中,我希望在一个页面上有2个表单。一种形式是注册用户,另一种形式是登录。
有两个提交按钮。一个注册,一个注册。
在模型中有验证注释,例如用户名是必填项,密码必须匹配,等等。
问题是,验证注释会相互影响。因此,当按下注册按钮时,登录用户名的验证无效。
我曾尝试编写部分视图,或者在一个视图中执行所有操作,编写一些自定义注释,尊重按下的按钮。
但这一切似乎都错了。这不是最好的解决方案。
实现这一目标的最佳途径是什么。
答案 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)
通过这种方式,您的部分视图会传递正确的模型,并且也可以作为部分视图重复使用,而不是在您的网络应用中。