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);
}