我在Controller中编写HttpGet和HttpPost方法。HttpPost方法已经可以使用,但是我有一些关于从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("GetData")。它能正常工作,并调用HttpGet方法从数据库中获取另一个调用。这是我的问题,如果ModelState.IsValid为false,它将调用View(model),导致错误:
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)来传递相同的模型数据。 以下是我的问题:
如果代码中仍然在寻找UpdateData.cshtml,那么我应该调用什么而不是View(model)来传递包含相同模型数据的视图以刷新视图并避免错误?
如果ModelState.IsValid为true,则它将更新数据库并调用HttpGet方法从数据库获取更新后的数据,并将模型传递给GetData中的视图。但是,如果ModelState.IsValid为false,则它会调用View(model)。这个调用会调用HttpGet还是只是刷新视图并使用旧的模型数据?
public async Task<ActionResult> GetData(MyViewModel model)
,这样就不需要指定视图名称了。最好使用标准的操作名称,如Edit()
或Create()
。 - user3559349