zoukankan      html  css  js  c++  java
  • 使用RouteValueDictionary简化对Asp.net MVC Helper的扩展

    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);
    }
  • 相关阅读:
    OpenCV 机器学习之 支持向量机的使用方法实例
    Lua中调用C函数(lua-5.2.3)
    我的Hook学习笔记
    几种开源分词工具的比較
    利用JasperReport+iReport进行Web报表开发
    移动前端开发者必知必会:移动设备概述
    图表插件--jqplot交互演示样例
    算法之二叉树各种遍历
    repo的小结
    sqlite3经常使用命令&amp;语法
  • 原文地址:https://www.cnblogs.com/XiaoG/p/1444493.html
Copyright © 2011-2022 走看看