19

在 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

提前致谢 !

4

5 回答 5

16

我一直在使用

return Content("");

并且工作正常。

于 2012-05-07T17:27:05.247 回答
15

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

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

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

public class EmptyPartialViewResult : PartialViewResult
{
    public override void ExecuteResult(ControllerContext context)
    {
    }
}
于 2012-08-03T11:58:55.330 回答
14

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

return default(PartialViewResult);

或者

return null;

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

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

在您看来,那么您将需要检查是否为空。Html.RenderAction看来接受没问题。

于 2016-05-23T09:33:32.680 回答
5

使用EmptyResult类:

return new EmptyResult();
于 2015-10-04T06:27:30.797 回答
1

视图不应该决定它应该是空的还是包含某些东西。视图应该尽可能“愚蠢”,以“花哨”的方式简单地显示模型中的数据。由控制器决定输出是空的还是包含一些要显示的数据。换句话说,由控制器返回空视图或非空视图。

解决方案

在 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);
}
于 2018-04-09T18:31:56.873 回答