我在EF模型中的验证有一个问题,我似乎不太清楚。不显眼的Javascript验证部分按预期工作。
考虑以下模型( RequiredIf属性来自this library):
public class Conversation
{
public int Id { get; set; }
public User User { get; set; }
public String Handler { get; set; }
}
[ComplexType]
public class User
{
public bool Anonymous { get; set; }
[RequiredIf("Anonymous", false)]
[Display(Name = "Full name")]
public String Name { get; set; }
}我的编辑器视图只显示User的字段,这是我的控制器。
[HttpPost()]
public ActionResult Create(Conversation conversation)
{
if (ModelState.IsValid)
{
_db.Conversations.Add(conversation);
_db.SaveChanges(); // fails on this line
}
return RedirectToAction("Index");
}这将导致以下错误:
DbUnexpectedValidationException: An unexpected exception was thrown during validation of 'Full name' when invoking Mvc.ValidationToolkit.RequiredIfAttribute.IsValid. See the inner exception for details.和内部异常:
Member 'Conversation.Anonymous' not found.为什么验证突然要查找Conversation.Anonymous,而不是Conversations.Client.Anonymous
发布于 2011-12-28 23:38:07
您不应该在视图中直接使用实体。创建一个特定于您的视图的View Model,然后使用类似于AutoMapper的东西将域对象映射到您的视图模型。将所有必需的、长度等验证放在视图模型上。
var model = Mapper.Map<Conversation, ConversationViewModel>(conversation);
return View(model);https://stackoverflow.com/questions/8657830
复制相似问题