首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EF ComplexType和验证

EF ComplexType和验证
EN

Stack Overflow用户
提问于 2011-12-28 23:34:37
回答 1查看 247关注 0票数 1

我在EF模型中的验证有一个问题,我似乎不太清楚。不显眼的Javascript验证部分按预期工作。

考虑以下模型( RequiredIf属性来自this library):

代码语言:javascript
复制
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的字段,这是我的控制器。

代码语言:javascript
复制
    [HttpPost()]
    public ActionResult Create(Conversation conversation)
    {
        if (ModelState.IsValid)
        {
            _db.Conversations.Add(conversation);
            _db.SaveChanges(); // fails on this line
        }
        return RedirectToAction("Index");
    }

这将导致以下错误:

代码语言:javascript
复制
DbUnexpectedValidationException: An unexpected exception was thrown during validation of 'Full name' when invoking Mvc.ValidationToolkit.RequiredIfAttribute.IsValid. See the inner exception for details.

和内部异常:

代码语言:javascript
复制
Member 'Conversation.Anonymous' not found.

为什么验证突然要查找Conversation.Anonymous,而不是Conversations.Client.Anonymous

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-28 23:38:07

您不应该在视图中直接使用实体。创建一个特定于您的视图的View Model,然后使用类似于AutoMapper的东西将域对象映射到您的视图模型。将所有必需的、长度等验证放在视图模型上。

代码语言:javascript
复制
var model = Mapper.Map<Conversation, ConversationViewModel>(conversation);

return View(model);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8657830

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档