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");
}
您正在设置ActionFilterMyActionFilter
,以便在调用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")