Извинения, я новичок в ASP.NET MVC.:)
Я не уверен, является ли это простым недоразумением или неправильной парадигмой, используемой для такого рода функций, но это то, что я до сих пор придумал ...
Я хочу предоставить общую функциональность, добавив атрибут css (в данном случае «активный») к тегу привязки, когда мы обнаружим, что пользователь находится на той же странице, что и его href.В контексте MVC (и специально для моего приложения) я интерпретирую это как «Когда текущий активный контроллер совпадает с целевым местоположением гиперссылки».
Хорошо!Так.Где я с кодом?
Я реализовал следующее вспомогательное расширение Html, чтобы помочь в создании слегка «подправленных» из стандартных ссылок, которые мне нужны.
public static MvcHtmlString ActiveActionLink (this HtmlHelper helper, string labelText, string action, string controller)
{
var cssProprties = controller + " active";
return helper.ActionLink(labelText, action, controller, null, new { @class = cssProprties });
}
В настоящее время выМожно видеть, что я применяю два класса CSS.Во-первых, это имя контроллера, это нормально.Позже у меня нет логики, я просто добавляю активный css-класс.Это то, к чему я пытался добавить логику.
Моя теория, все, что мне нужно сделать, это найти нужный объект, чтобы найти контроллер, в котором я сейчас нахожусь, и сопоставить его спараметр «controller», который передается. Если они совпадают, добавьте активный класс.
Итак, в двух вопросах ...
Это правильный / приемлемый способ«мышления» в ASP.NET mvc?
Если да, то какие объекты я могу найти, с того уровня, на котором я нахожусь, чтобы получить доступ к информации для сравнения - что мне нужно?
ОБНОВЛЕНИЕ:
После того, что обычно происходит, когда я пишу вопрос по SO, у меня возникла мозговая волна.Я заметил фрагмент кода в помощнике BeginForm, который привел меня к созданию этого примера:
public static MvcHtmlString ActiveActionLink (this HtmlHelper helper, string labelText, string action, string controller)
{
var cssProprties = controller;
// if this controller is the target controller, page is active.
if (helper.ViewContext.RouteData.Values["controller"].ToString() == controller)
cssProprties += " active";
return helper.ActionLink(labelText, action, controller, null, new { @class = cssProprties });
}
Так что я думаю, что это отвечает на вопрос "какие объекты я могу копать?"вопрос.Кроме того, поскольку на это непосредственно повлиял источник MVC - предположительно, «это правильный / приемлемый способ« мышления »в ASP.NET mvc?»вопрос тоже?