【发布时间】:2013-03-09 08:34:35
【问题描述】:
我遇到这样的问题已经有一段时间了,但一劳永逸地想知道发生了什么:)
我有一个简单的 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;
}
}
您可以看到Member 只有一个引用。 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 不断声明它是无效的。
- 如何让它发挥作用并从模型状态验证中排除子属性?
- 绑定排除如何真正发挥作用?对于子对象以及结合视图模型使用模型绑定的最佳做法是什么?
最诚挚的问候, 哥尼尔
【问题讨论】:
-
LINQ to SQL 实体中的 User.EncryptedPassword 是什么数据类型?
-
string(SO 填充字符。这里)
标签: c# .net asp.net-mvc-3 model-binding