ASP.NET Core Action Filter在模型为空时返回特定的局部视图

时间:2018-02-02 09:41:30

标签: asp.net core action-filter

我有一个Action,它返回一个带有模型的局部视图,但是我必须检查模型是否为null ...

现在我使用以下代码来检查这个并在模型为空时返回不同的局部视图

           if (model == null)
        {
            return PartialView("~/Views/Shared/PartialViews/_frmSideBarWindowInfo.cshtml", new SideBarWindowInfo { Nachricht = "Der Datensatz kann nicht angezeigt werden, da er gelöscht wurde!" });
        }

但是,不是将其添加到每个返回部分视图的Action,而是要编写ActionFilter并将ActionFilterAttribute添加到必要的Actions中。

我的问题是哪种Actionfilter最适合ResultFilter?以及如何在此过滤器中更改局部视图和模型?

罗伯特

1 个答案:

答案 0 :(得分:0)

对于像这样的东西,过滤器似乎有些过分。你可以制作一个扩展方法并保持这个非常简单。

public static class ControllerExtensions
{
    public static PartialViewResult SideBar(this Controller controller, object model)
    {
        return SideBar(null, model);
    }

    public static PartialViewResult SideBar(this Controller controller, string viewName, object model)
    {
        if (model == null)
        {
            return controller.PartialView("~/Views/Shared/PartialViews/_frmSideBarWindowInfo.cshtml", 
                new SideBarWindowInfo 
                { 
                    Nachricht = "Der Datensatz kann nicht angezeigt werden, da er gelöscht wurde!" 
                });
        }

        return controller.PartialView(viewName, model);
    }
}

然后导入您在控制器中放置ControllerExtensions的命名空间,并使用操作方法而不是PartialView来调用它:

return SideBar(model); // instead of PartialView(model);

return SideBar("SomeView", model); // instead of PartialView("SomeView", model);