gpt4 book ai didi

asp.net - 使用 RenderBeginTag 和 RenderEndTag 有什么意义

转载 作者:行者123 更新时间:2023-12-02 18:46:28 24 4
gpt4 key购买 nike

自定义控件可以使用它来渲染跨度标签:

writer.RenderBeginTag(HtmlTextWriterTag.Span);  
writer.Write(Text);
writer.RenderEndTag();

好吧,为什么我不能这样做:

writer.Write("<span>");
writer.Write(Text);
writer.Write(</span>");

这样我实际上可以看到它,而不是到处读取 HtlmlTextWriter 标签,并且还可以轻松调整任何标记,例如向标签添加 cs 类、id 或 whaetver。如果您说由于 Intellisense,打字速度更快,这是使用 RenderBegin 和 RenderEnd 的唯一原因吗?这并不是什么大事。

最佳答案

在我工作的地方,我们专门在大型自定义控件套件中使用 RenderBeginTag()/RenderEndTag() 技术,并且通常避免直接调用 Write("")。有几个很好的理由:

  • 正如 Patrick 所指出的,通过使用 RenderBeginTag()/RenderEndTag(),您不会意外地发出名称中有拼写错误的元素。

  • 使用 RenderBeginTag()/RenderEndTag(),ASP.NET 运行时会告诉您是否发出了错误的标记 --- 如果您忘记了先前 RenderBeginTag() 的匹配 RenderEndTag(),ASP.NET 运行时将告诉您是否发出了错误的标记。 NET 将在您的页面上引发异常。这使得拥有未封闭的元素变得非常困难。

  • 同样,您也不能以这种方式不匹配结束标记 ---

    必须以
    结束,并且不能意外地以 结束。

    <
  • AddAttribute() 方法允许将复杂的单个元素分为逻辑 block :此方法添加适当的 CSS 类名,正确计算 value 属性,并且该方法那里添加了一个特殊的自定义 foo 属性。使用 StringBuilder 进行这种元素组装是可能的,但它可能更容易出错。

  • 工具可以自动、可靠地为您找到用法。如果我想知道控件中发出跨度的每一行代码,我只需搜索 HtmlTextWriterTag.Span 的用法即可。在“ span 和一个 a 元素(取决于 Enabled 标志)。

  • 扩展方法可以扩展 AddAttribute() 方法,以更复杂的方式添加属性:我们有一个 AddNonNullClassnames() 扩展方法,可以从多个字符串中的任意一个构造 class 属性传入的值既不是 null 也不是空的,事实证明,它是构建仍然可以通过 CSS 完全设置样式的复杂控件的天赐之物。

  • ASP.NET 将尝试(我说是尝试)根据元素的嵌套深度对输出执行正确的缩进。它并不总是成功,但它的结果比仅在一行上发出所有 HTML 或将其放在左列上更适合调试。

(郑重声明,我们使用纯 CSS 布局 --- 我的 watch 上没有基于表格的布局,谢谢! --- 这些技术也对此有所帮助。)

我自己一开始对此非常抗拒——它又长又啰嗦,而且是专有的,就像你指出的那样,并且来自开源背景,我一开始发现它很臭——但在三个之后经过多年的使用,我可以说它使代码更加灵活,使某些复杂的操作变得更加容易,并为输出添加了令人惊讶的安全性和简洁性。

关于asp.net - 使用 RenderBeginTag 和 RenderEndTag 有什么意义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1066189/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com