c# - 如何更新模型状态?

标签 c# asp.net-mvc

这是我用 ajax post 方法调用的 Controller 操作:

    [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?

最佳答案

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

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

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

关于c# - 如何更新模型状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4855259/

相关文章:

c# - 在 PostgreSQL 中存储基于 NodaTime 的值的最佳方法是什么?

c# - CaSTLe DynamicProxy - 'classToProxy' 必须是一个类

asp.net-mvc - MVC 4 - Ajax - 用另一个替换部分 View

c# - 从 Controller 在 MVC 强类型 View 上强制执行所需的参数?

javascript - 如何让 ActionResult 不重定向页面?

c# - MVC2 c# 表格中的多种形式。一种表单在回发时覆盖其他表单元素

asp.net-mvc - ASP.NET MVC 1 到 Azure 迁移

c# - 当 Canvas Render Mode 设置为 World Space 时没有事件

c# - 是否可以查询实际存储在 Varchar 字段中的 twitter 时间戳?

一旦超出索引,C# 循环数组索引值回到数组的开头