MVC5未使用的模型字段在GET和POST之间丢失

时间:2015-06-29 14:28:49

标签: asp.net-mvc-5

如果我通过使用初始化数据(如当前用户名)填充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?

1 个答案:

答案 0 :(得分:3)

该数据必须以某种形式存在。如果没有字段,请添加一个隐藏字段:

@Html.HiddenFor(x=> x.SomeField)

控制器无法直接将信息从一个操作传递到另一个操作。需要在目标操作中的反序列化模型上存在的任何信息都需要从HTTP请求中反序列化,这意味着它必须在表单中。

当然,请注意,用户可以查看和编辑此值。任何敏感的东西都不应该发送给用户,任何来自用户的东西都应该被验证。