如何更新ModelState?

fre*_*nky 9 c# asp.net-mvc

这是我用ajax post方法调用的控制器动作:

    [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
        {
            //...
        }
    }
Run Code Online (Sandbox Code Playgroud)

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

m0s*_*0sa 4

您可以使用自定义模型绑定器从 User.Identity 绑定评论的 Username 和 Email 属性。因为绑定发生在验证之前,所以 ModelState 将在那时有效。

另一种选择是为 Comment 类实现自定义模型验证器,用于检查ControllerContext.Controller中是否经过验证的用户。

通过实施任何这些选项,您可以删除第一个 if 检查。