MVC3比较属性和嵌套的对象属性
问题描述:
我有以下几点:MVC3比较属性和嵌套的对象属性
public class Address
{
public string Email { get; set; }
}
public class CheckoutViewModel
{
public Address Address { get; set; }
[Compare("Address.Email", ErrorMessage = "The email addresses you entered do not match")]
public string ConfirmEmailAddress { get; set; }
}
使用客户端JS,这个工作的治疗和验证正确。但是,在未启用JavaScript的情况下进行测试时,表单发布回来,但ModelState错误消息为:
找不到名为Address.Email的属性。
任何想法为什么这可以在客户端,但不是服务器?这种情况下的解决方案是什么?
非常感谢。
答
如果您查看生成的HTML源代码,您应该发现Email的输入元素被称为“Address.Email”,这就是验证在客户端运行的原因。
但是它看起来像该属性不是为了处理嵌套属性而构建的,所以在服务器级别它不起作用(因为没有名为“Address.Email”的属性)。因此,您需要确保两个属性处于同一级别(无论是在ViewModel还是在Address类中)。
如果可能将电子邮件地址属性放到视图模型上,然后再填充地址对象,那么这是最好的选择。