2015-05-04 108 views
0

我有两个方法的控制器:.NET MVC返回从控制器查看无模型

  • Index(),加载从DB数据模型。
  • GetFile(),返回一个供用户下载的文件。

如果GetFile()失败,我想返回视图,并带有errormessage。我不是从视图发送模型到控制器方法GetFile()。

我的问题是:

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

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

+0

您可以重定向到可以使用另一种观点只为显示错误, – Mairaj

回答

3

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

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

在这如果您必须在控制器视图文件夹或共享视图文件夹中包含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> 
} 
... 
+0

是的,这是可能的,但我想返回到相同的看法,但添加errormessages。 – TorK

+0

我想补充说,你可以提供错误消息作为第二个参数像这样viewmodel:'返回视图(“错误”,“出事了......”);'。 –

+0

@TorK检查编辑答案。 – py3r3str

0

对我来说,最干净的解决方案是创建自定义对象来承载所有错误。 通过使用List和/或一个错误消息(例如,最终用户可理解的文本),可以使用该对象返回到视图,以显示错误。 这是具有多个字段,你可以,也许,以编辑填写您需要一个容器:

public class Container<T> 
    { 
     private List<Error> _errors; 
     private string _errorMessage; 
     private bool _hasErrors; 
     public T Value { get; set; } 

     public bool HasErrors 
     { 
      get 
      { 
       if (!_hasErrors && !string.IsNullOrEmpty(this.ErrorMessage)) 
       { 
        _hasErrors = true; 
       } 
       return _hasErrors; 
      } 
      set 
      { 
       _hasErrors = value; 
      } 
     } 

就这样,在视图中,你只需要检查,如果你的Model.hasError,否则,你可以使用Model.Value 。

牛逼可能是字符串,自定义对象,或任何你想要收藏列表...所以你可以使用它在整个项目

+0

_“最干净的解决方案”_ - 不,你只是重建'ModelState'。解释为什么这是一个很好的解决方案,它为现有的错误处理和显示机制增添了什么。 – CodeCaster

1

如果我重定向到指数(),我errormessage的dissapear。

这就是为什么你应该使用TempData的:Difference Between ViewData and TempData?

在你的控制器:

TempData["ImportError"] = "Some error string"; 
return RedirectToAction("Index"); 

在索引视图:

@TempData["ImportError"] 
+1

我认为他不想加载索引(并调用DB)当有错误 – clement

+0

@clement no,OP说:_“如果我重定向到Index(),我的错误消息消失如果我想返回到视图从GetFile(),我将不得不初始化模型并调用数据库。“_ OP不想再次显示'GetFile()'。 – CodeCaster

+0

他还说__我想返回到相同的视图,但添加错误消息.__ – clement

相关问题