Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将操作筛选器添加到局部视图_C#_Asp.net Mvc_Asp.net Mvc 4 - Fatal编程技术网

C# 将操作筛选器添加到局部视图

C# 将操作筛选器添加到局部视图,c#,asp.net-mvc,asp.net-mvc-4,C#,Asp.net Mvc,Asp.net Mvc 4,我知道,通过将以下内容添加到整个控制器或控制器内部的方法,可以将操作过滤器添加到视图中: [MyActionFilter] <-- Can be placed here... public class MyController : Controller { [MyActionFilter] <-- ...or here public ActionResult Index() { return View(); } } 我的局部视图在多个

我知道,通过将以下内容添加到整个控制器或控制器内部的方法,可以将操作过滤器添加到视图中:

[MyActionFilter] <-- Can be placed here...
public class MyController : Controller
{
    [MyActionFilter] <-- ...or here
    public ActionResult Index()
    {
        return View();
    }
}
我的局部视图在多个视图上被引用,因此我不想将上述代码添加到每个控制器。将上述代码放在基本控制器类中是否可以接受?这样,继承基控制器的每个类都可以使用该代码

更新:

我通过执行以下操作实现了所需的功能,但这是正确的方法吗??

我将下面的方法放在所有控制器继承的基本控制器中,因此这是唯一需要声明它的地方。我将
PartialView()
方法从
ViewResult
类型更改为
ActionResult
类型,并返回
PartialView

[MyActionFilter]
public ActionResult PartialView()
{
    return PartialView("PartialView");
}

我还必须将视图中的实际引用从
@Html.Partial(“MyPartialView”)
更改为
@Html.Action(“MyPartialView”)
操作过滤器不适用于视图,它们适用于控制器中的操作方法

因此,通过这样做:

[MyActionFilter]
public ViewResult MyPartialView()
{
    return View("PartialView");
}
您正在设置ActionFilter
MyActionFilter
,以便在调用
MyPartialView
操作时调用。因此,为了回答您的问题,如果
MyPartialView
是唯一返回
“PartialView”
的操作方法,那么您不需要在其他任何地方应用它

但是在另一个控制器上考虑这个动作:

public ViewResult AnotherWayToGetMyPartialView()
{
    return View("PartialView");
}
如果您有另一个返回
“PartialView”
的操作方法,那么您还需要在那里添加ActionFilter,因为它是一个不同的操作方法,而不是视图

编辑:

您的返回类型是
ActionResult
还是
ViewResult
,并不重要。
ViewResult
ActionResult
的子类,因此两者都可以工作并调用操作过滤器。但是,对于要调用的操作以及操作过滤器,而不仅仅是视图,您需要确保呈现的是操作而不是视图。因此:

@Html.Action("MyPartialView") 
与此相反:

@Html.Partial("MyPartialView") 

因为最后一个将绕过action方法

因此,如果我将
MyPartialView()
ViewResult
更改为
ActionResult
,这是否可以接受?
@Html.Partial("MyPartialView")