繁体   English   中英

ASP.NET ControllerBase扩展方法在Razor视图上不起作用

[英]ASP.NET ControllerBase Extension Method Doesn't Work on Razor View

我已经创建了如下扩展方法

public static class RBACExtension
{
    public static bool HasPermission(this ControllerBase controller, string permission)
    {
       // some implementation 
    }
}

在控制器内部工作正常

public class HomeController : Controller
{
    public ActionResult Index()
    {
        this.HasPermission("somePermission");
        return View();
    }
}

但这在Razor内部不起作用。 当我想使用该方法时,它不会显示在自动完成功能上。

ViewContext.Controller.HasPermission("somePermission")

如何使其在Razor视图中可用?

将扩展方法放在类似的名称空间中

namespace mynamespace.extensions{
public static class RBACExtension
{
    public static bool HasPermission(this ControllerBase controller, string permission)
    {
       // some implementation 
    }
 }
}

并在视图顶部放置using语句,例如

@using mynamespace.extensions

这样您就可以使用此方法了

ViewContext.ControllerController类,而不是您的基本控制器类。 尽管这样做会使您的控制器与视图耦合,但这样做有些尴尬。 改用扩展方法(因为自定义的HtmlHelper是一个很好的方法),例如:

public static class MyExtensions
{
    public static bool HasPermission(this HtmlHelper helper, string permission)
    {
        // blah
    }
}

并在Razor中这样使用:

@Html.HasPermission("admin")

或者,将该方法放在从WebViewPage继承的类中,以在Razor视图中使用。 例如:

public abstract class MyBaseViewPage : WebViewPage
{
    public bool HasPermission(string permission)
    {
        // blah
    }
}

然后通过编辑Views/web.config使Razor页面使用它

<pages pageBaseType="YourProject.MyBaseViewPage">

现在在Razor中,您只需执行以下操作:

@HasPermission("admin")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM