ModelState验证失败时,如何保留并返回来自Visa Type页面的VisaTypeId?
解决ModelState验证失败后丢失VisaTypeId的问题
方法1:用隐藏字段保留VisaTypeId
在「User Add」视图的表单内部,添加一个隐藏输入框,把Get方法传入的VisaTypeId存进去,这样提交表单时会自动把这个Id传给Post接口:
<input type="hidden" name="visaTypeId" value="@ViewBag.Id" />
接着在Post方法返回视图前,把收到的visaTypeId重新赋值给ViewBag,保证页面能正常获取:
[HttpPost] public async Task<IActionResult> AddUser(UserModel userModel, string uniqueUser, int visaTypeId) { // ... 原有业务逻辑 ... // 返回视图前重新设置ViewBag ViewBag.Id = visaTypeId; return View(userModel); }
方法2:将VisaTypeId整合进UserModel
如果允许修改UserModel,直接给它新增一个VisaTypeId属性:
public class UserModel { // ... 原有属性 ... public int VisaTypeId { get; set; } }
在Get方法里把值赋给模型,视图里用强类型绑定的隐藏字段:
@Html.HiddenFor(m => m.VisaTypeId)
Post方法里就不用单独接收visaTypeId参数,直接从userModel中读取即可:
[HttpPost] public async Task<IActionResult> AddUser(UserModel userModel, string uniqueUser) { int visaTypeId = userModel.VisaTypeId; // ... 原有业务逻辑 ... // 返回视图时模型自带VisaTypeId,页面可直接调用Model.VisaTypeId return View(userModel); }
方法3:用TempData临时存储
不想修改视图或模型的话,可以用TempData临时保存VisaTypeId。先在Get方法里存入:
[HttpGet] public IActionResult AddUser(int visaTypeId) { TempData["VisaTypeId"] = visaTypeId; // ... 原有逻辑 ... }
然后在Post方法里读取,并且返回视图前重新存入一次(因为TempData读取后会自动失效):
[HttpPost] public async Task<IActionResult> AddUser(UserModel userModel, string uniqueUser) { int visaTypeId = (int)TempData["VisaTypeId"]; TempData["VisaTypeId"] = visaTypeId; // 重新存储,确保返回视图时能拿到 // ... 原有业务逻辑 ... ViewBag.Id = visaTypeId; return View(userModel); }
内容的提问来源于stack exchange,提问作者mustafasamet
相关产品推荐
相关产品推荐

