ASP.NET MVC绑定排除不在视图模型中的嵌套对象上工作?

GON*_*ale 2 .net c# model-binding asp.net-mvc-3

我一直遇到这样的问题,但一劳永逸地想知道发生了什么:)

我有一个简单的ASP.NET MVC视图绑定到视图模型类MemberViewModel.

MemberViewModel包含一个Linq To Sql实体对象,我的表单主要绑定到该对象Member,但是我确实有大约三个其他表单字段绑定到一个名为的子类Member.User.

Member包含有关用户的个人信息,并Member.User包含用户名+密码信息,这两个信息都存储在数据库的单独表中.

现在正如我所说,视图的模型对象使用了一个自定义视图模型类MemberViewModel,其内容如下:

[Bind(Exclude = "EncryptedPassword")]
public class MemberViewModel : ViewModel
{
    public Member Member { get; set; }

    public string Password { get; set; }
    [DisplayName("Confirm Password")]
    public string ConfirmPassword { get; set; }

    public MemberViewModel() { }
    public MemberViewModel(Member member, SelectList countryList)
    {
        Member = member;
        CountryList = countryList;
    }
}
Run Code Online (Sandbox Code Playgroud)

你可以看到只有一个引用Member.成员是一个Linq to Sql对象,里面有它的引用User.Password+ ConfirmPassword并且仅形成字段,并且在Linq To Sql中没有等效的对应项.

现在我的问题是,每当我提交表单时,我的ModelState.IsValid属性总是返回false,说明模型错误The EncryptedPassword field is invalid.

现在,无论我添加[Bind(Exclude = "Member.User.EncryptedPassword")]到我MemberViewModel作为一个阶级属性,或在局部类User本身[Bind(Exclude = "EncryptedPassword")]ModelState.IsValid不断地指出它是无效的.

  1. 如何使其运行并从模型状态验证中排除子属性?
  2. Bind Exclude如何真正起作用,什么是子对象的最佳实践,以及与视图模型一起使用模型绑定?

最基本的问候,GONeale

Tat*_*die 5

[Bind]属性仅影响模型绑定.也就是说,ASP.NET MVC框架是否会尝试从请求中填充属性.

你的问题与验证有关 - 一个完整的其他野兽.:)