当前位置:  开发笔记 > 后端 > 正文

HtmlHelper方法和RouteValueDictionary

如何解决《HtmlHelper方法和RouteValueDictionary》经验,为你挑选了1个好方法。

在编写htmlhelper扩展时如果我想为我的htmlhelper扩展方法支持类似结构的ctors,我使用RouteValueDictionary如下:

public static string ListBoxDict(this HtmlHelper htmlHelper, 
                                 string name, 
                                 object value, 
                                 object htmlAttributes)
{
    return ListBoxDict(htmlHelper, 
                       name, 
                       value, 
                       ((IDictionary)
                           new RouteValueDictionary(htmlAttributes)));
}

我的问题真的是为什么需要RouteValueDictionary......我知道你不能只是投了htmlAttributesIDictionary......虽然我不知道为什么,并且可能是在那里我很困惑.不RouteValueDictionary应该与路由有关,因此与HtmlHelper方法无关?就像我说的那样,我可能会忽略这一点,所以如果有人能告诉我我错过了什么,我会很高兴.

干杯...

编辑:回应丹的回答 - >

我只是按照我在mvc源代码中看到的用于输入助手的内容...

看" src\SystemWebMvc\Mvc\Html\InputExtensions.cs"

它做如下:

public static string TextBox(this HtmlHelper htmlHelper, 
                             string name, 
                             object value, 
                             object htmlAttributes)
{
    return TextBox(htmlHelper, 
                   name, 
                   value,
                   new RouteValueDictionary(htmlAttributes))
}

显然是捷径,但它是一个混蛋还是可以做到的?



1> Dan Atkinson..:

我强烈建议您查看Rob Conery的博客文章.

它的肉和蔬菜是这样的:

Codedump:

public static string ToAttributeList(this object list)
{
  StringBuilder sb = new StringBuilder();
  if (list != null)
  {
    Hashtable attributeHash = GetPropertyHash(list);
    string resultFormat = "{0}=\"{1}\" ";
    foreach (string attribute in attributeHash.Keys)
    {
      sb.AppendFormat(resultFormat, attribute.Replace("_", ""), 
          attributeHash[attribute]);
    }
  }
  return sb.ToString();
}

public static string ToAttributeList(this object list,
                                     params object[] ignoreList)
{
  Hashtable attributeHash = GetPropertyHash(list);

  string resultFormat = "{0}=\"{1}\" ";
  StringBuilder sb = new StringBuilder();
  foreach (string attribute in attributeHash.Keys)
  {
    if (!ignoreList.Contains(attribute))
    {
      sb.AppendFormat(resultFormat, attribute, 
          attributeHash[attribute]);
    }
  }
  return sb.ToString();
}

public static Hashtable GetPropertyHash(object properties)
{
  Hashtable values = null;

  if (properties != null)
  {
    values = new Hashtable();
    PropertyDescriptorCollection props = 
        TypeDescriptor.GetProperties(properties);

    foreach (PropertyDescriptor prop in props)
    {
      values.Add(prop.Name, prop.GetValue(properties));
    }
  }
  return values;
}

用法:

public static string ListBoxDict(this HtmlHelper htmlHelper, 
                                 string name, 
                                 object value, 
                                 object htmlAttributes)
{
    return htmlHelper.ListBoxDict(name,
                                  value,
                                  htmlAttributes.ToAttributeList()));
}

什么.ToAttributeList()是将htmlAttribute对象转换为

name ="value"

希望这是有道理的.


呵呵.我再次为另一个项目寻找这个并找到了我自己的答案!真好运气!
推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有