На стороне сервера вы можете использовать BaseViewModel, который содержит информацию о том, какая ссылка должна иметь текущий класс. Все ваши модели представлений будут наследоваться от этого базового класса, а MasterPage будет строго типизирован в BaseViewModel. Затем вы можете использовать модель для настройки ссылок.
На стороне клиента вы можете применить определенный идентификатор или класс, который уникально идентифицирует каждую ссылку и связывает ее с определенным URL. При загрузке страницы вы можете использовать jQuery (или другой), чтобы добавить класс к соответствующей ссылке на основе логики сопоставления для вашего приложения.
Я предпочитаю первое, так как оно будет работать, даже если JavaScript не доступен.
public class BaseViewModel
{
public string CurrentLink { get; set; }
...
}
Просмотр логики
<div id="menu">
<ul>
<li><a href="#" class="<%= Model.CurrentLink == "home" ? "current" : "" %>">home</a></li>
<li><a href="#" class="<%= Model.CurrentLink == "addimage" ? "current" : "" %>">add image</a></li>
<li><a href="#" class="<%= Model.CurrentLink == "contact" ? "current" : "" %>">contact</a></li>
</ul>
</div>
Более того, я бы, вероятно, собрал помощника HTML, который сгенерировал бы пункт меню для меня. По сути, используйте TagBuilder для создания привязки и применяйте класс, используя модель в ViewContext, связанном с HtmlHelper. Оберните это в li
и верните как строку. Делает логику страницы намного чище, и, если ваши ссылки связаны с контроллерами / действиями, вы также можете использовать эту информацию из ViewContext, чтобы выбрать, какая из них должна быть текущей ссылкой.