Как заменить токены на главной странице в asp.net mvc? - PullRequest
1 голос
/ 21 марта 2010

У меня есть главная страница в моем проекте asp.net MVC, код которой такой:

    <div id="menu">
        <ul>
            <li><a href="#" class="current">home</a></li>
            <li><a href="#">add image</a></li>
            <li><a href="#">contact</a></li>
        </ul>
    </div>

В зависимости от того, на какой странице я нахожусь, я бы хотел переместить атрибут class="current" в другой <li>.

Каков общий шаблон, с которым это делается в ASP.NET MVC?

Ответы [ 2 ]

1 голос
/ 21 марта 2010

На стороне сервера вы можете использовать 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, чтобы выбрать, какая из них должна быть текущей ссылкой.

1 голос
/ 21 марта 2010
if( HttpContext.Current.Request.Url == "my link string" )
    //add your current attribute

Никакого специального соуса MVC не добавляет к этому сценарию.

...