10

メソッドの呼び出しで条件付きでパラメーターを追加できるかどうか疑問に思っています。

たとえば、Site.Masterでのナビゲーション用に一連のリンク(合計6つ)をレンダリングしています。

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

そのページにある場合は、リンクに「選択済み」のCSSクラスを含めたいと思います。だから私のコントローラーで私はこれを返します:

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

そして、ビューにhtmlAttributesディクショナリがあります。

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

ここでの唯一の質問は、適切なActionLinkのhtmlAttributesをどのように含めるかです。私は各リンクに対してこのようにそれを行うことができます:

<% htmlAttributes.Clear();
   if (ViewData["CurrentPage"] == "Contact") htmlAttributes.Add("class","selected");%>
<%= Html.ActionLink("Contact", "Contact", "Pages", htmlAttributes) %>

しかし、それは少し繰り返しのようです。この疑似コードのようなことをする方法はありますか?

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

これは明らかに有効な構文ではありませんが、それを行う正しい方法はありますか?これらのリンクをレンダリングするためのまったく異なる提案を受け入れます。タグをハードコーディングする代わりに、ルートの使用を利用するActionLinkのようなものを使い続けたいと思います。

4

1 に答える 1

15

3つのオプションがあります。

<%= 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>
于 2010-05-13T04:16:55.720 に答える