asp.net MVC3 razor:根据用户角色显示actionlink

Mat*_*all 62 c# razor asp.net-mvc-3

我是MVC的新手.我希望能够为某些用户隐藏一些动作链接.假设我有一个"创建"动作链接,我只希望管理员查看并单击.我想在asp.net中使用某种"loggedmpmplate",但它似乎不适用于剃须刀.

我可以使用某种代码块和if语句检查当前用户及其角色,但这可能不是最佳做法?

我的index.cshtml ..

// want some adminauth attribute here...
@Html.ActionLink("Create New", "Create")
Run Code Online (Sandbox Code Playgroud)

我的控制器..

// GET: /Speaker/Create
[Authorize(Roles = "Administrators")]
public ActionResult Create()
{
    return View();
}
Run Code Online (Sandbox Code Playgroud)

Ric*_*ard 136

我在过去创建了一个辅助函数,只在满足条件时返回输出,如下所示:

public static MvcHtmlString If(this MvcHtmlString value, bool evaluation)
{
     return evaluation ? value : MvcHtmlString.Empty;
}
Run Code Online (Sandbox Code Playgroud)

所以你可以使用这个:

@Html.ActionLink("Create New", "Create").If(User.IsInRole("Administrators"))
Run Code Online (Sandbox Code Playgroud)

这样它就清晰易懂


Mat*_*ieu 41

如果你想要一个代码块,那将在视图中执行:

@if (Roles.IsUserInRole("Administrators"))
{
  <li>@Html.ActionLink("Create New", "Create")</li>
}
Run Code Online (Sandbox Code Playgroud)

  • @Kristofer:在某些情况下,你可能想要一个块结构来避免让html挂起来. (4认同)

Ela*_*son 7

我已经修改了Richard的代码,以便在评估为false时提供可选的MvcHtmlString参数.

public static MvcHtmlString If(this MvcHtmlString value, bool evaluation, MvcHtmlString falseValue = default(MvcHtmlString))
        {
            return evaluation ? value : falseValue;
        }
Run Code Online (Sandbox Code Playgroud)