[英]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.Controller
是Controller
类,而不是您的基本控制器类。 尽管这样做会使您的控制器与视图耦合,但这样做有些尴尬。 改用扩展方法(因为自定义的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.