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)
我已经修改了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)