2

使用 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);

但是这两者有什么不同,我什么时候应该更喜欢一个而不是另一个?

4

1 回答 1

4

通过查看TagBuilderdotPeek,我可以看到 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;
    }

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

于 2012-10-24T13:03:23.693 回答