作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
这是我用 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/
我是一名优秀的程序员,十分优秀!