我有以下内容:
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的属性。
有关为何在客户端而非服务器上运行的任何想法?在这种情况下解决方案是什么?
非常感谢。
答案 0 :(得分:2)
如果您查看生成的HTML源代码,您会发现Email的输入元素称为“Address.Email”,这就是验证在客户端工作的原因。
然而,看起来该属性不是为了处理嵌套属性而构建的,因此在服务器级别它不起作用(因为没有名为“Address.Email”的属性)。因此,您需要确保两个属性处于同一级别(在ViewModel上或同时在Address类上)。
您可能最好选择将电子邮件地址属性放到视图模型上,然后再填充地址对象。