Asp.net MVC中提供的大量的Helper,比如下面的Helper:
public static string ActionLink(this HtmlHelper htmlHelper, string linkText, string actionName, object routeValues, object htmlAttributes)
實際開發中我們也不可避免對Helper進行擴充,比如擴充一個 Link 方法 (MVC本身只提供了ActionLink與RouteLink,對最普通的Link沒有擴充)
public static string Link(this HtmlHelper htmlHelper, string linkText, string linkHref, object htmlAttributes)
{
.
}
這裡面有個 htmlAttribute ,在C#3.0中就是所謂的“匿名型別”,它可以允許使用者調用此方法時這樣寫:
<%=Html.Link("CaraQ","http://www.caraq.com",new {@class="home",target="_blank"}) %>
那麼在Link方法中如何知道使用者到底指定了哪些html屬性、值呢?
經過查看MVC源碼發現它是使用了一個RouteValueDictionary類,這個類在System.Web.Routing組件中定義的,所以可以如下方式獲得使用者指定的html屬性值:
public static string Link(this HtmlHelper htmlHelper, string linkText, string linkHref, object htmlAttributes)
{
string reval = "<a href=\"{0}\" {1}>{2}</a>";
StringBuilder builder = new StringBuilder();
foreach(var item in new RouteValueDictionary(htmlAttributes))
{
builder.Append(item.Key + "=\"" + item.Value + "\" ");
}
return string.Format(reval,linkHref,builder.ToString(),linkText);
}