我正在使用标准的MVC3 Razor视图和不显眼的Javascript验证,@Html.ValidationSummary用于在表单的顶部显示它们.如果标准验证(类似的东西[Required])通过,我会运行一些非常自定义的客户端验证,当用户点击提交按钮时会激活该验证.(验证查看了许多表单元素,以确保已经检查了它们的正确集合等,因此它不像仅为单个字段创建新的自定义验证器那么简单).
我希望我在那里构建的可能错误显示在ValidationSummary列表中,但我无法弄清楚如何让错误消息出现在那里.
我想使用下面的代码为新用户创建一个视图模型."User"类只包含我将持久保存到数据库的两个属性(现在简化); 视图模型添加"比较密码"字段,该字段仅在视图中使用.我更喜欢让视图模型直接使用"User"类,而不是重复"User"中定义的所有字段.
我的问题是如何在"ComparePassword"字段的[Compare]属性中正确引用"User.Password"?
public class User
{
[Required]
public string UserName { get; set; }
[Required]
[DisplayName("Password")]
[DataType(DataType.Password)]
public string Password { get; set; }
}
public class NewUserViewModel
{
public User User { get; set; }
[Required]
[DataType(DataType.Password)]
[DisplayName("Re-enter Password")]
[Compare("Password", ErrorMessage="Passwords must match")]
public string ComparePassword { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
为"密码"和"ComparePassword"生成的HTML如下所示.
<input class="text-box single-line password"
data-val="true"
data-val-required="The Password field is required."
id="User_Password"
name="User.Password"
type="password" value="" />
<input class="text-box single-line password"
data-val="true"
data-val-equalto="Passwords must match"
data-val-equalto-other="*.Password"
data-val-required="The Re-enter …Run Code Online (Sandbox Code Playgroud) 有没有办法可以为单个对象调用模型绑定器?
我不想/需要自定义模型绑定器 - 我只想做这样的事情:
MyViewModel1 vModel1 = new MyViewModel1();
InvokeModelBinder(vModel1);
MyViewModel2 vModel2= new MyViewModel2();
InvokeModelBinder(vModel2);
Run Code Online (Sandbox Code Playgroud)
当我完成后,vModel1和vModel2的属性已经绑定到传入请求中的内容.由于我们的控制器/操作的编写方式,我不一定要在操作方法的输入列表中列出vModel1和vModel2(因为最终会有一个可能很长的视图模型列表,可以选择绑定).