10
我不知道是否有可能在一个方法的调用有条件地添加参数。有条件加htmlAttributes到ASP.NET MVC Html.ActionLink
例如,我在我的Site.Master渲染一大堆的链接(总共六个)导航:
<%= 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这样的功能,尽管可以利用我的路线,而不是硬编码标签。
完美的答案。感谢您的选择! – macca1 2010-05-13 04:32:14
我发现这对禁用属性不起作用,因为浏览器在'disabled =“”'的情况下禁用了html元素。编写你自己的html助手方法似乎是这种情况的唯一解决方案。 – arviman 2011-06-28 00:03:04
从MVC 4开始,您可以将任何属性设置为null,并且根本不会呈现该属性。 – 2014-04-29 02:39:30