Даниэль прав, что нет способа сделать это короче с существующими помощниками и методами, но если вы создаете много ссылок на меню и все они очень похожи, вы можете написать небольшую вспомогательную функцию:
@helper MenuLink(string linkText, string action = "Index", string controller = null)
{
<li>@Html.ActionLink(linkText, action, controller ?? linkText.Replace(" ", string.Empty))</li>
}
Теперь ваш код выглядит следующим образом:
<ul id="menu">
@if (HttpContext.Current.User.IsInRole("admin")) {
@MenuLink("Administration")
}
</ul>
Эти значения по умолчанию помогают сократить время, но если вам нужно действие, отличное от Index
, или имя вашего контроллера не совпадает с ссылкойтекст без пробелов, их легко переопределить:
@MenuLink("Admin reports", "Admin", "Reports")
Если пойти еще дальше, я использую несколько методов расширения, которые сделают это еще короче:
public static class HtmlStringConditionalExtensions
{
public static IHtmlString If(this IHtmlString value, bool evaluation)
{
return evaluation ? value : MvcHtmlString.Empty;
}
public static IHtmlString ForRoles(this IHtmlString value, params string[] roles)
{
return value.If(roles.Any(HttpContext.Current.User.IsInRole));
}
}
ИТеперь вы можете написать:
<ul id="menu">
@MenuLink("Administration").ForRoles("admin")
</ul>