Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC3比较属性和嵌套对象属性_C#_.net_Asp.net Mvc 3_Validation_Jquery Validate - Fatal编程技术网

C# MVC3比较属性和嵌套对象属性

C# MVC3比较属性和嵌套对象属性,c#,.net,asp.net-mvc-3,validation,jquery-validate,C#,.net,Asp.net Mvc 3,Validation,Jquery Validate,我有以下资料: 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")] pub

我有以下资料:

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源代码,您会发现电子邮件的输入元素名为“Address.Email”,这就是验证在客户端工作的原因

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

您最好的选择是将Email address属性放到视图模型中,然后稍后填充address对象