【问题标题】:MVC3 Compare attribute and nested object propertiesMVC3 比较属性和嵌套对象属性
【发布时间】:2012-04-04 18:58:39
【问题描述】:

我有以下几点:

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 的属性。

关于为什么这适用于客户端而不是服务器的任何想法?这种情况下的解决办法是什么?

非常感谢。

【问题讨论】:

    标签: c# .net asp.net-mvc-3 validation jquery-validate


    【解决方案1】:

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

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

    最好的选择是将电子邮件地址属性放到视图模型中,然后稍后填充地址对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-25
      • 2010-12-15
      • 1970-01-01
      相关资源
      最近更新 更多