有条件地将htmlAttributes添加到ASP.NET MVC Html.ActionLink

mac*_*ca1 10 c# parameters asp.net-mvc conditional actionlink

我想知道是否可以在对方法的调用中有条件地添加参数.

例如,我在我的Site.Master中渲染一堆链接(总共六个)用于导航:

<%= Html.ActionLink("About", "About", "Pages") %> | 
<%= Html.ActionLink("Contact", "Contact", "Pages") %>
<%-- etc, etc. --%>
Run Code Online (Sandbox Code Playgroud)

如果它在该页面上,我想为链接包含一个"选定"的CSS类.所以在我的控制器中我回来了:

ViewData.Add("CurrentPage", "About");
return View();
Run Code Online (Sandbox Code Playgroud)

然后在视图中我有一个htmlAttributes字典:

<% Dictionary<string,object> htmlAttributes = new Dictionary<string,object>();
   htmlAttributes.Add("class","selected");%>
Run Code Online (Sandbox Code Playgroud)

现在我唯一的问题是如何为正确的ActionLink包含htmlAttributes.我可以通过这种方式为每个链接做到这一点:

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

但这似乎有点重复.有没有办法做这样的psuedo代码:

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

这显然不是有效的语法,但有没有正确的方法呢?我对提供这些链接的任何完全不同的建议持开放态度.我想继续使用像ActionLink这样的东西,利用我的路线,而不是硬编码标签.

SLa*_*aks 15

这有三个选项:

<%= 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>
Run Code Online (Sandbox Code Playgroud)

  • 我发现这对于disabled属性不起作用,因为浏览器在`disabled =""`的情况下禁用了html元素.编写自己的html辅助方法似乎是该案例的唯一解决方案. (6认同)