我已经创建了如下所示的扩展方法
Graph::Node::Edge
它在控制器内工作正常
public static class RBACExtension
{
public static bool HasPermission(this ControllerBase controller, string permission)
{
// some implementation
}
}
但它在Razor内部无效。当我想使用该方法时,它不会显示在自动完成上。
public class HomeController : Controller
{
public ActionResult Index()
{
this.HasPermission("somePermission");
return View();
}
}
如何在Razor视图中使用它?
答案 0 :(得分:2)
将扩展方法放在像
这样的命名空间中namespace mynamespace.extensions{
public static class RBACExtension
{
public static bool HasPermission(this ControllerBase controller, string permission)
{
// some implementation
}
}
}
并在您的视图顶部放置一个using语句,如
@using mynamespace.extensions
然后,您的视图中将提供此方法
答案 1 :(得分:2)
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
<pages pageBaseType="YourProject.MyBaseViewPage">
现在在Razor你可以这样做:
@HasPermission("admin")