干净的方式返回一个空的mvc局部视图

时间:2012-05-07 17:23:46

标签: c# asp.net-mvc asp.net-mvc-partialview

在cshtml文件中,根据条件,返回空部分视图的最佳方法是什么?

现在我有:

@if(Model.Count() > 0)
{
  loooonng partial view block of markup code
}

我怎样才能让它看起来更清洁:

@if(Model.Count() == 0)
{
  render an empty partial view
}

  loooonng partial view block of markup code goes here   <- This will obviously get executed only if Model.Count() > 0

提前致谢!

5 个答案:

答案 0 :(得分:15)

不确定你是否还需要答案,但我遇到了这个问题,这就是我在视图中所做的:

@if(Model.Count() == 0)
{
return; // a simple return will stop execution of the rest of the View
}

在Controller级别,我创建了一个新类并在我的操作中返回它:

public class EmptyPartialViewResult : PartialViewResult
{
    public override void ExecuteResult(ControllerContext context)
    {
    }
}

答案 1 :(得分:14)

我一直在使用

return Content("");

并且工作正常。

答案 2 :(得分:10)

如果您返回PartialViewResult我发现在控制器中您可以使用

return default(PartialViewResult);

return null;

没有任何问题。我能想到的唯一考虑因素是你是否正在使用

var partialView = Html.Action("Action", "Controller");

在您的视图中,您需要检查null。 Html.RenderAction似乎接受它没问题。

答案 3 :(得分:3)

使用EmptyResult类:

return new EmptyResult();

答案 4 :(得分:0)

视图不应该决定它是否应为空或包含某些内容。一个观点应该是&#34;哑的&#34;尽可能简单地在模型中显示模型中的数据&#34; fancy&#34;办法。由控制器决定输出应该为空还是包含要显示的数据。换句话说,由控制器返回空视图或非空视图。

解决方案

在Views / Shared:

下创建一个空视图(空* .cshtml文件)
MVC_Project 
├── Views
    ├── Shared
        ├── _Empty.cshtml

控制器代码:

public virtual PartialViewResult SomeAction()
{
    //some condition to determine if the view should be empty
    //maybe check if some properties of the model are null?
    if(returnEmptyView) 
        return PartialView("~/Views/Shared/_Empty.cshtml");

    return PartialView("~/Views/Something/NormalView.cshtml", model);
}