Мне нужно выделить активную ссылку в меню. Кстати, мое меню находится на главной странице. Я ищу лучший способ реализовать это? Есть идеи?Asp.Net Mvc выделяет текущую технику ссылки на страницу?
ответ
Лучший способ справиться с этим - написать HTML-помощник. Вы можете использовать RouteData.Values["action"]
, чтобы получить выполняемое в данный момент действие и сравнить с именем меню, и если они соответствуют применяемому классу CSS, который выделит его.
public static MvcHtmlString MenuItem(
this HtmlHelper htmlHelper,
string action,
string text
)
{
var menu = new TagBuilder("div");
var currentAction = (string)htmlHelper.ViewContext.RouteData.Values["action"];
if (string.Equals(
currentAction,
action,
StringComparison.CurrentCultureIgnoreCase)
)
{
menu.AddCssClass("highlight");
}
menu.SetInnerText(text);
return MvcHtmlString.Create(menu.ToString());
}
И затем использовать этот помощник для отображения пунктов меню:
<%: Html.MenuItem("about", "About us") %>
<%: Html.MenuItem("contact", "Contact us") %>
...
Привет, Дарин. Где можно помещать HTML Helpers? Новая папка, а затем использовать «импорт», чтобы включить ее? Как я могу это использовать? Благодарю. – user1477388
да, где это поставить? – 4pie0
Существует не соглашение и не место для размещения пользовательских HTML-помощников. Лично я размещаю методы расширения в папке Helpers. –
Я уверен, что вы можете сделать это с помощью чистого CSS. Он включает в себя селектор классов и faffing around с тегом тела. Я бы пошел со вспомогательным методом каждый день недели.
Я использую это решение:
Первый - добавить атрибут данных-menuPageId в меню связывает
<ul class="menu">
<li data-menuPageId="home">
@(Html.Link<HomeController>(x => x.Index(), "Home"))
</li>
<li data-menuPageId="products">
@(Html.Link<ProductsController>(x => x.Index(), "Products"))
</li>
</li>
Следующая - добавить скрытое поле для текущей страницы Id к Layout.cshtml
<input type="hidden" id="currentPageId" value="@(ViewBag.Page ?? "home")" />
Добавить ViewBag.Page на ваших страницах, например, Главная или Продукты
@{
ViewBag.Page = "products";
}
И последняя вещь, которую вы должны сослаться на эту Javascipt из йор Layout.cshtml
$(function() {
var pageIdAttr = "data-menuPageId";
var currentPage = $("#currentPageId").attr("value");
var menu = $(".menu");
$("a[" + pageIdAttr + "]").removeClass("selected");
$("a[" + pageIdAttr + "=\"" + currentPage + "\"]", menu).addClass("selected");
});
Я всегда использовать это решение Html Часть
<ul>
@Html.ListItemAction("Home Page","Index","Home")
@Html.ListItemAction("Manage","Index","Home")
</ul>
Helper Часть
public static class ActiveLinkHelper
{
public static MvcHtmlString ListItemAction(this HtmlHelper helper, string name, string actionName, string controllerName)
{
var currentControllerName = (string)helper.ViewContext.RouteData.Values["controller"];
var currentActionName = (string)helper.ViewContext.RouteData.Values["action"];
var sb = new StringBuilder();
sb.AppendFormat("<li{0}", (currentControllerName.Equals(controllerName, StringComparison.CurrentCultureIgnoreCase) &&
currentActionName.Equals(actionName, StringComparison.CurrentCultureIgnoreCase)
? " class=\"active\">" : ">"));
var url = new UrlHelper(HttpContext.Current.Request.RequestContext);
sb.AppendFormat("<a href=\"{0}\">{1}</a>", url.Action(actionName, controllerName), name);
sb.Append("</li>");
return new MvcHtmlString(sb.ToString());
}
}
В макет попробуйте следующее:
@{
string url = Request.RawUrl;
}
@switch (url)
{
case "/home/":
@Html.ActionLink("Home", "../home/", null, new { @style = "background:#00bff3;" })
@Html.ActionLink("Members", "../home/MembersList/")
break;
case "/home/MembersList/":
@Html.ActionLink("Home", "../home/")
@Html.ActionLink("Members", "../home/MembersList/", null, new { @style = "background:#00bff3;" })
break;
default:
@Html.ActionLink("Home", "../home/")
@Html.ActionLink("Members", "../home/MembersList/")
break;
}
Если вы хотели бы также предоставить информацию контроллер, пожалуйста, посмотрите на эту ссылку
- 1. Как отключить ссылки на текущую страницу в ASP.NET MVC?
- 2. Подсветка ссылки на текущую страницу
- 3. Ajax.ActionLink только Ссылки на текущую страницу
- 4. Отключить ссылки на текущую страницу в Django
- 5. перенаправление на текущую страницу в ASP.Net
- 6. Как визуально указать текущую страницу в ASP.NET MVC?
- 7. Как правильно создать меню навигации, которое выделяет текущую страницу
- 8. asp.net mvc гиперссылка на страницу?
- 9. ASP.NET MVC Зайти на страницу
- 10. ASP.NET MVC PartialView не выделяет разметку проверки
- 11. Выделите ссылки на текущую страницу на сайте modularize
- 12. ASP.Net MVC 3 Ссылки Ссылки
- 13. перенаправление на текущую страницу
- 14. перенаправить на текущую страницу
- 15. Как отправить на текущую страницу?
- 16. MongoDB ссылки ASP.NET MVC
- 17. MVC Html.PagedListPager() - Как обновить текущую страницу?
- 18. Получить значения из ссылки, которая привела меня на текущую страницу
- 19. Изменение CSS для ссылки на текущую страницу с jQuery
- 20. cakekphp 3: Создание ссылки на текущую страницу с параметром языка
- 21. Исправить относительные ("~") пути без ссылки на текущую страницу?
- 22. Свойства ссылки CSS при указании на текущую активную страницу
- 23. Ссылки ASP.NET не перенаправляются на нужную страницу
- 24. Поиск Ссылки на страницу
- 25. ASP.NET обновить текущую страницу, щелкнув изображение
- 26. asp.net mvc сценарий и ссылки на стиль
- 27. Есть ли ссылки на ASP.Net MVC-приложения
- 28. Обновить текущую страницу на submit
- 29. Угловое перенаправление на текущую страницу
- 30. ASP.NET MVC перенаправление на страницу входа всегда
Hw вы храните пункты меню? Вы можете связать их с контроллером и действием и выделить на основе этих значений. – LukLed
Я храню их на главной странице как статическую. – beratuslu
Уже здесь? См. Http://stackoverflow.com/questions/1471362/how-to-visually-indicate-current-page-in-asp-net-mvc – thmshd