gpt4 book ai didi

c# - 将 Action 过滤器添加到局部 View

转载 作者:太空宇宙 更新时间:2023-11-03 10:51:04 25 4
gpt4 key购买 nike

我知道我可以通过将以下内容添加到整个 Controller 或 Controller 内部的方法来将操作过滤器添加到 View :

[MyActionFilter] <-- Can be placed here...
public class MyController : Controller
{
[MyActionFilter] <-- ...or here
public ActionResult Index()
{
return View();
}
}

但是我如何将 Action 过滤器添加到局部 View ?

我是否需要在我的父 Controller 中声明分部 View ,并将其应用于该方法?

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

我的部分 View 被多个 View 引用,所以我不想将上面的代码添加到每个 Controller 。将上述代码放在 Controller 基类中是否可以接受?这样每个继承基 Controller 的类都可以使用该代码。

更新:

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

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

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

我还必须将 View 中的实际引用从 @Html.Partial("MyPartialView") 更改为 @Html.Action("MyPartialView")

最佳答案

Action 过滤器不适用于 View ,它们适用于 Controller 中的 Action 方法。

所以通过这样做:

[MyActionFilter]
public ViewResult MyPartialView()
{
return View("PartialView");
}

您正在设置 ActionFilter MyActionFilter,以便在调用 MyPartialView 操作时调用。因此,要回答您的问题,如果 MyPartialView 是唯一返回 "PartialView" 的操作方法,那么您无需在其他任何地方应用它。

但考虑在另一个 Controller 上执行此操作:

public ViewResult AnotherWayToGetMyPartialView()
{
return View("PartialView");
}

如果您有另一个返回 "PartialView" 的操作方法,那么您还需要在那里添加 ActionFilter,因为它是一个不同的 Action Method,而不是 View 。

编辑:

无论您的返回类型是 ActionResult 还是 ViewResult 都没有关系。 ViewResultActionResult 的子类,因此两者都可以工作并调用 Action 过滤器。但是,要调用 Action 并因此调用 Action Filter,而不仅仅是 View ,您需要确保呈现的是 Action 而不是 View ……所以这样:

@Html.Action("MyPartialView") 

而不是这个:

@Html.Partial("MyPartialView") 

因为最后一个会绕过 action 方法。

关于c# - 将 Action 过滤器添加到局部 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21392992/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com