2010-05-13 19 views
10

Ich frage mich, ob es möglich ist, einen Parameter in einem Aufruf zu einer Methode bedingt hinzuzufügen.Bedingte HTML-Attribute zu ASP.NET MVC hinzufügen Html.ActionLink

Zum Beispiel habe ich eine Reihe von Links bin Rendering (insgesamt sechs) für die Navigation in meinem Site.Master:

<%= Html.ActionLink("About", "About", "Pages") %> | 
<%= Html.ActionLink("Contact", "Contact", "Pages") %> 
<%-- etc, etc. --%> 

Ich mag eine CSS-Klasse von "selected" für den Link enthalten, wenn Es ist auf dieser Seite. Also in meinem Controller bin ich Rückkehr dies:

ViewData.Add("CurrentPage", "About"); 
return View(); 

Und dann in der Ansicht Ich habe ein Htmlattributes Wörterbuch:

<% Dictionary<string,object> htmlAttributes = new Dictionary<string,object>(); 
    htmlAttributes.Add("class","selected");%> 

Nun meine Frage ist nur, wie füge ich das Htmlattributes für die richtige Action . Ich könnte es so für jeden Link tun:

Aber das scheint ein wenig wiederholt. Gibt es irgendeine Art und Weise so etwas wie dieser Pseudo-Code zu tun:

<%= Html.ActionLink("Contact", "Contact", "Pages", if(ViewData["CurrentPage"] == "Contact") { htmlAttributes }) %> 

die offensichtlich nicht gültige Syntax ist, aber gibt es eine richtige Art und Weise, das zu tun? Ich bin offen für irgendwelche völlig anderen Vorschläge für die Wiedergabe dieser Links. Ich möchte bei etwas wie ActionLink bleiben, das die Vorteile meiner Routen nutzt, anstatt das Tag hart zu codieren.

Antwort

15

sind hier drei Möglichkeiten:

<%= Html.ActionLink("Contact", "Contact", "Pages", 
     new { @class = ViewData["CurrentPage"] == "Contact" ? "selected" : "" }) %> 

<%= Html.ActionLink("Contact", "Contact", "Pages", 
     ViewData["CurrentPage"] == "Contact" ? new { @class = "selected" } : null) %> 

<a href="<%=Url.Action("Contact", "Pages")%>" 
    class="<%=ViewData["CurrentPage"] == "Contact" ? "selected" : "" %>">Contact</a> 
+0

perfekte Antwort. Danke für die Optionen! – macca1

+6

Ich finde, dass dies nicht für das deaktivierte Attribut funktioniert, da der Browser HTML Elemente für den Fall von 'disabled = "" 'deaktiviert. Das Schreiben Ihrer eigenen HTML-Hilfsmethode scheint die einzige Lösung für diesen Fall zu sein. – arviman

+1

Ab MVC 4 können Sie jedes Attribut auf null setzen und das Attribut überhaupt nicht rendern. –

Verwandte Themen