我在Controller中编写HttpGet和HttpPost方法。我得到了HttoPost方法,但我对从HttpPost重定向到HttpGet方法有一些疑问。
[HttpGet]
public async Task<ActionResult> GetData(MyViewModel model)
{
// Get Data
return View(model);
}
[HttpPost]
public async Task<ActionResult> UpdateData(MyViewModel model)
{
try
{
if (ModelState.IsValid)
{
// Update updatedModelObject
//return RedirectToAction("GetData", updatedModelObject);
return RedirectToAction("GetData");
}
}
catch (Exception)
{
}
//return RedirectToAction("GetData", "MyController");
//return RedirectToAction("GetData");
return View(model);
}
当我单击页面上的提交按钮时,它会调用HttpPost UpdateData方法。如果是ModelState.IsValid,它会更新数据库并调用RedirectToAction(&#34; GetData&#34;)。它确实有效并调用HttpGet方法从数据库进行另一次调用。这是我的问题,如果ModelState.IsValid为false,它将调用导致错误的View(模型):
The view 'UpdateData' or its master was not found or no view
engine supports the searched locations. The following locations were
searched:
~/Views/MyController/UpdateData.cshtml
~/Views/MyController/UpdateData.vbhtml
~/Views/Shared/UpdateData.cshtml
~/Views/Shared/UpdateData.vbhtml
~/__MVCSITEMAPPROVIDER/UpdateData.ascx
我一直在阅读许多帖子,其中示例HttpGet和HttpPost方法都命名为Index(),因此它不会像我得到的那样得到相同的错误。我使用了不同的HttpGet和HttpPost方法名称,因此它正在寻找UpdateData.cshtml。从我读过的帖子中,他们说如果Model.IsValid为true则调用带有更新模型的HttpGet来传递。如果Model.IsValid为false,则帖子会调用View(model)来传递相同的模型数据。
以下是我的问题。
我应该调用什么而不是View(模型)来传递具有相同模型的View来刷新查看相同的模型数据并避免错误?作为代码,它寻找UpdateData.cshtml
如果ModelState.IsValid为true,它将更新数据库并调用HttpGet从数据库中获取刷新的数据,并将模型传递给GetData中的View。但是如果ModelState.IsValid为false,则调用View(model)。这会调用HttpGet还是只是用旧的模型数据刷新View?
感谢。
答案 0 :(得分:5)
我应该调用什么而不是View(模型)来传递View 相同的模型刷新查看相同的模型数据,避免 错误?作为代码,它寻找UpdateData.cshtml
而不是return View(model);
传递视图名称以返回,使用模型:
return View("GetData", model);
如果ModelState.IsValid为false,则为 调用View(模型)。这会调用HttpGet还是应该刷新 使用旧模型数据查看?
使用任何ModelState信息将填充的模型呈现给用户,以便他们可以修复验证。
GET操作不会再次处理。
<小时/> This article提供了有关如何实现POST - REDIRECT - GET的更多信息。