.NET MVC从没有模型的控制器返回View

时间:2015-05-04 07:48:47

标签: asp.net-mvc

我有一个控制器有两种方法:

  • Index(),使用来自DB的数据加载模型。
  • GetFile(),返回供用户下载的文件。

如果GetFile()失败,我想返回视图,并显示错误消息。我不是将模型从View发送到控制器方法GetFile()。

我的问题是:

  • 如果我想从GetFile()返回视图,我将不得不初始化模型并调用DB来获取数据。在我看来,这是浪费资源,应该避免。

我的问题:有没有办法返回视图,而无需再次初始化模型(调用DB)

2 个答案:

答案 0 :(得分:3)

您可以在View()方法中指定视图名称:

...
if(error)
{
     return View("Error");
}
return View(model);
...

在这种情况下,您必须在控制器View文件夹或Share视图文件夹中包含Error.cshtml文件。在tahat视图中,您不需要定义模型。

您还可以使用TempData在重定向后向控制器发送错误消息:

...
if(error)
{
     TempData["ErrorMessage"] = "Error";
     return Redirect("Index");
}
return View(model);
...

然后在索引或布局视图中:

...
<div class="error">@TempData["ErrorMessage"]</div>
...

如果你想渲染相同的视图但没有模型,你必须在使用模型之前检查模型是否为空。

...
if(Model != null)
{
     //---display model
}
else
{
     <div>Error message</div>
}
...

答案 1 :(得分:1)

  

如果我重定向到Index(),我的错误消息会消失。

这就是你应该使用TempData:array_column()

的原因

在您的控制器中:

@TempData["ImportError"]

在索引视图中:

int_stdcall WinMain (HINSTANCE hInstance,   HINSTANCE hPrevInstance, 
                     LPSTR IpszCmdline, int nCmdShow)