Toggle navigation
首页
技术
骑行
羽毛球
资讯
联络我
登录
ASP.NET Core MVC Post请求中更改Model的注意事项
2017-10-19
.NET Core
# 问题描述 假设View: ```html @model EditViewModel <form asp-action="Edit" enctype="multipart/form-data"> <div class="form-horizontal"> <div class="form-group"> <label asp-for="Title" class="col-md-2 control-label"></label> <div class="col-md-10"> <input type="text" asp-for="Title" class="form-control"/> <span asp-validation-for="Title" class="text-danger"></span> </div> </div> <div class="form-group"> <div class="col-md-offset-2 col-md-10"> <input type="submit" value="Save" class="btn btn-default" /> </div> </div> ``` Controller: ```c# [HttpPost] [ValidateAntiForgeryToken] public IActionResult Edit([FromForm] EditViewModel editViewModel) { if (ModelState.IsValid) { editViewModel.Title = "New Title"; return View(editViewModel); ``` 假设在View页面输入Title的值:Old Title,点击“submit”按钮,经过Controller更改Title值以后,Edit页面中Title的值还是 Old Title,原因是 form post的时候,ModelState会记录当前form的输入在页面render的时候默认填补post之前的值。 在github的这篇里面有讨论到: https://github.com/aspnet/Mvc/issues/5525 解决办法有两个: * 在view页面中input控件添加 value = @Model.Title * 在controller return model之前,调用ModelState.Clear() ```c# editViewModel.Title = "New Title"; ModelState.Clear(); return View(editViewModel); ```
×
本文为博主原创,如需转载,请注明出处:
http://www.supperxin.com
返回博客列表