首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何更新ModelState?

如何更新ModelState?
EN

Stack Overflow用户
提问于 2011-02-01 03:42:28
回答 2查看 11.7K关注 0票数 9

这是我用ajax post方法调用的一个控制器操作:

代码语言:javascript
复制
    [HttpPost]
    public ActionResult Add(Comment comment)
    {
        if (User.Identity.IsAuthenticated)
        {
            comment.Username = User.Identity.Name;
            comment.Email = Membership.GetUser().Email;
        }

        if (ModelState.IsValid)
        {
            this.db.Add(comment);
            return PartialView("Comment", comment);
        }
        else
        {
            //...
        }
    }

如果用户已登录,则提交表单没有用户名和电子邮件字段,因此ajax调用不会传递这些字段。当操作被调用时,ModelStat.IsValid返回false,因为这两个属性是必需的。在我为属性设置了有效值之后,我如何触发模型验证来更新ModelState?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-02-01 04:28:09

您可以使用自定义model binder从User.Identity绑定评论的用户名和电子邮件属性。因为绑定发生在验证之前,所以ModelState将在那时有效。

另一种选择是为Comment类实现一个自定义model validator,它检查ControllerContext.Controller中是否有经过验证的用户。

通过实现这些选项中的任何一个,您都可以删除第一个if check。

票数 4
EN

Stack Overflow用户

发布于 2011-02-01 04:15:24

您可以尝试调用内置的TryUpdateModel方法,该方法返回一个布尔值,以便您可以检查该值。

更新:尝试使用包含异常的TryUpdateModel。在Action.中使用表单集合而不是注释

代码语言:javascript
复制
[HttpPost]
    public ActionResult Add(FormCollection collection)
    {

        string[] excludedProperties = new string[] { "Username". "Email" };
        var comment = new Comment();
        if (User.Identity.IsAuthenticated)
        {
            comment.Username = User.Identity.Name;
            comment.Email = Membership.GetUser().Email;
        }

        TryUpdateModel<Comment>(comment, "", null, excludedProperties, collection.ToValueProvider());

        if (ModelState.IsValid)
        {
            this.db.Add(comment);
            return PartialView("Comment", comment);
        }
        else
        {
            //...
        }
    }
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4855259

复制
相关文章

相似问题

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