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,这可以正确地处理和validation。 但是,在没有启用Javascript的情况下进行测试时,表单会回发,但ModelState错误会显示:

找不到名为Address.Email的属性。

有关为什么在客户端而不是服务器上工作的任何想法? 这种情况下的解决方案是什么?

非常感谢。

如果您查看生成的HTML源代码,您应该会发现Email的输入元素称为“Address.Email”,这就是validation在客户端工作的原因。

但是,看起来该属性不是为了处理嵌套属性而构建的,因此在服务器级别它不起作用(因为没有名为“Address.Email”的属性)。 因此,您需要确保两个属性处于同一级别(在ViewModel上或在Address类上都是)。

如果可能将Email地址属性放在视图模型上,然后再填充Address对象,则是最佳选择。