ASP.NET MVC HttpPost返回View()导致错误,因为它无法找到cshtml

时间:2016-01-13 23:10:20

标签: asp.net-mvc

我在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)来传递相同的模型数据。

以下是我的问题。

  1. 我应该调用什么而不是View(模型)来传递具有相同模型的View来刷新查看相同的模型数据并避免错误?作为代码,它寻找UpdateData.cshtml

  2. 如果ModelState.IsValid为true,它将更新数据库并调用HttpGet从数据库中获取刷新的数据,并将模型传递给GetData中的View。但是如果ModelState.IsValid为false,则调用View(model)。这会调用HttpGet还是只是用旧的模型数据刷新View?

  3. 感谢。

1 个答案:

答案 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的更多信息。