如果我通过使用初始化数据(如当前用户名)填充Model对象来响应GET,并且视图中没有使用该字段的编辑器,那么当我的表单发布时,该字段将被清空。如果我也使用DisplayFor或LableFor,这似乎也是正确的。
示例:
//ChangeAccountInfo
[Authorize]
public ActionResult ChangeSecurityQA() {
ChangeSecurityQAModel qa = new ChangeSecurityQAModel(@User.Identity.Name);
//this constructor sets UserName and loads several other fields necessary for the process.
return View(qa);
}
//
//ChangeSecurityQA Post
[HttpPost]
[Authorize]
public ActionResult ChangeSecurityQA(ChangeSecurityQAModel iModel) {
\\iModel.UserName is now null...
}
有问题的视图不使用UserName,但我将在POST处理程序中调用的方法将使用。
对于用户名来说再次获得它并不是什么大不了的事,但对于更复杂流程的信息,如何确保控制器GET输入模型的信息将返回到POST?
答案 0 :(得分:3)
该数据必须以某种形式存在。如果没有字段,请添加一个隐藏字段:
@Html.HiddenFor(x=> x.SomeField)
控制器无法直接将信息从一个操作传递到另一个操作。需要在目标操作中的反序列化模型上存在的任何信息都需要从HTTP请求中反序列化,这意味着它必须在表单中。
当然,请注意,用户可以查看和编辑此值。任何敏感的东西都不应该发送给用户,任何来自用户的东西都应该被验证。