2009-06-04 4 views
14

Я ищу способ изменить класс ActionLink в контроллере на основе определенных критериев (не найден в модели, поэтому я не могу написать условно в самом представлении). Но я не могу найти ViewData («name»), который позволяет мне работать с этим элементом (я предполагаю, что это возможно, но я чего-то не хватает).Как динамически изменять класс Html.ActionLink в MVC

У меня есть HTML помощника, как так, на мой взгляд

<%=Html.ActionLink("View", "Index", "Home")%> 

Но в моем контроллере я не уверен, как ссылаться на это, как и ниже, чтобы добавить атрибут как класс или OnClick.

ViewData("View").attributes.add("class", "active") 

ответ

29

Вы не устанавливаете атрибуты CSS из контроллера, поскольку это вызывает озабоченность представления. Вы можете добавить HTML атрибуты к ActionLink так:

<%=Html.ActionLink("View Cases", "Index", "Home", new { @class="active" })%> 

В качестве альтернативы вы можете создать свои якоря «вручную»:

<a href="<%=Url.Action("Index", "Home")%>" class="active">View Cases</a> 

Или, если вам нужно условно установить активный класс:

<% var activeClass = someCondition ? "active" : ""; %> 
<a href="<%=Url.Action("Index", "Home")%>" class="<%=activeClass%>">View Cases</a> 
+0

согласен, но в случае, когда мне нужно показать/скрыть пункт меню на основе учетных данных пользователя (преобразование веб-форм в MVC) - как я могу это сделать в MVC? –

+1

Отредактировано с большим количеством примеров. –

+3

Для отображения/скрытия на основе учетных данных, либо объединить с блоком if, либо написать метод расширения HtmlHelper для инкапсуляции логики. Вы можете передать значение из контроллера, если пользователь аутентифицирован, а затем проверить его в представлении. –

2

В обзоре Razor вы можете сделать что-то вроде этого:

@model AssessmentQuestionViewModel 

@{var newClass = Model.AnswerValue == 0 ? "not-answered" : string.Empty;} 

<a href="@Url.Action("Index", "Home")" class="wizard-step @newClass">View Question</a>