使用RouteValueDictionary简化对Asp.net MVC Helper的扩展

本文详细介绍了在ASP.NET MVC框架中如何扩展Helper方法,以实现更灵活的HTML元素生成,包括获取并解析用户指定的HTML属性,并通过实例展示了如何创建一个通用的Link方法来替代ActionLink和RouteLink,最终通过源码分析揭示了如何通过RouteValueDictionary类获取用户指定的HTML属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值