何时在Attributes.Add上使用MergeAttribute

时间:2012-10-24 11:02:33

标签: c# asp.net-mvc-3 tagbuilder

使用TagBuilder时,可以使用TagBuilder.Attributes.Add(..)TagBuilder. MergeAttribute(..)向正在构建的HTML元素添加属性:

TagBuilder formBuilder = new TagBuilder("form");
formBuilder.Attributes.Add("method", "get");
formBuilder.Attributes.Add("action", url);

TagBuilder buttonBuilder = new TagBuilder("input");
buttonBuilder.MergeAttribute("type", "submit");
buttonBuilder.MergeAttribute("value", buttonText);

但两者有什么不同,何时我更喜欢一个?

1 个答案:

答案 0 :(得分:4)

通过使用dotPeek查看TagBuilder,我可以看到Attributes是SortedDictionary

来自ctor:

this.Attributes = new SortedDictionary<string, string>(StringComparer.Ordinal);

在SotredSet上调用Add最终调用内部函数AddIfNotPresent(item)

public bool Add(T item)
{
  return this.AddIfNotPresent(item);
}

这意味着Attributes.Add与调用MergeAttribute相同而不设置replaceExisting == true

   public void MergeAttribute(string key, string value, bool replaceExisting)
    {
      ...

      if (!replaceExisting && this.Attributes.ContainsKey(key))
        return;
      this.Attributes[key] = value;
    }

所以我的建议是在Add上使用MergeAttribute并始终指定replaceExisting以提高可读性并确保不会产生意外结果。