Есть навбар, он идет один на все страницы, нужно чтобы при заходе пользователя с другими правами в навбаре будет изменятся количество и название некоторых ссылок. Как это лучше реализовать?
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<a class="navbar-brand" href="#">Navbar</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav">
<li class="nav-item active">
<a class="nav-link" href="#">Главная <span class="sr-only">(current)</span></a>
</li>
ВСТАВИТЬ СЮДА ЭЛЕМЕНТЫ
</ul>
</div>
</nav>
Чем не вариант?
<ul class="nav navbar-nav">
@Html.Partial("_MenuForEveryone");
@if (User.IsInRole("Manager"))
{
@Html.Partial("_MenuForManager");
}
@if (User.IsInRole("Administrator"))
{
@Html.Partial("_MenuForAdministrator");
}
</ul>
Где каждый из подключаемых partial view будет чем-то вида:
<li><a asp-area="Admin" asp-controller="Contact" asp-action="MyContacts">Мои контакты</a></li>
<li><a asp-area="Admin" asp-controller="Contact" asp-action="MyContacts">link2</a></li>
Есть и более сложные варианты, когда вам на ссылки нужно навешивать класс active - это может пригодиться когда у вас на странице табы или дизайнер упёрся и упорно хочет сделать текущую ссылку более хитро подсвеченной.
Я писал для этого небольшой экстеншн:
public static class HtmlHelperExtensions
{
public static IHtmlContent LiActionLink(this IHtmlHelper helper, string linkText, string actionName, string controllerName, object routeValues)
{
var currentAction = helper.ViewContext.RouteData.Values["action"].ToString();
var currentController = helper.ViewContext.RouteData.Values["controller"].ToString();
var isCurrentAction = currentAction.Equals(actionName, StringComparison.InvariantCulture) &&
currentController.Equals(controllerName, StringComparison.InvariantCulture);
var li = new TagBuilder("li");
if (isCurrentAction)
li.AddCssClass("active");
var link = helper.ActionLink(linkText, actionName, controllerName, routeValues);
li.InnerHtml.SetHtmlContent(link);
var writer = new System.IO.StringWriter();
li.WriteTo(writer, HtmlEncoder.Default);
return new HtmlString(writer.ToString());
}
}
Пользоваться так:
<ul class="nav nav-tabs">
@Html.LiActionLink("Details", nameof(MyController1.DetailsCurrent), "MyController1", new { id = Model.Contact.Id })
@Html.LiActionLink("Archieve", nameof(MyController1.DetailsArchieve), "MyController1", new { id = Model.Contact.Id })
</ul>
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Создаю игру в unityПишу скрипты в Visual Studio 2017
Как мне передать некую дополнительную информацию, когда происходит событие клика на кнопку? К примеру, существует ListBox, который выводит информацию...
Есть ли возможность использовать шарповый энум как в плюсах? Вот что я имею ввиду: