何时在普通 HTML 上使用 runat="server"

Posted

技术标签:

【中文标题】何时在普通 HTML 上使用 runat="server"【英文标题】:When to use runat="server" on normal HTML 【发布时间】:2012-07-12 16:37:05 【问题描述】:

是否适合在标准 html 元素上使用 runat="server" 而不是真正的 ASP.NET 控件?我可以完全控制设置普通元素的 html/文本,那么为什么我不使用它来代替“笨重”的 ASP.NET WebForms 控件呢?

如果一个比另一个更好,我想知道一些兴趣点:

性能差异 功能差异 其他不那么明显的区别?

示例差异:

<asp:Literal ID="mySpecialHtml" runat="server" />

<div id="mySpecialHtml" runat="server" />

【问题讨论】:

【参考方案1】:

两者都是 ASP.NET 服务器控件。 HTML元素对应的是System.Web.UI.HtmlControls命名空间,web控件是System.Web.UI.WebControls命名空间。

HTML 控件更轻量级,并且与 HTML 元素完全对应,而 Web 控件具有更多功能,可以根据浏览器功能和控件设置呈现为不同的 HTML 元素。

HTML 控件呈现为单个 HTML 元素,而 Web 控件呈现为零个或多个 HTML 元素。例如,Literal 控件不会呈现为元素,它只输出其文本。还有其他控件本身不会呈现任何元素,例如RepeaterPlaceHolder 控件。另一方面,CheckBoxList 控件例如呈现为几个 HTML 元素,table 作为容器,input 元素用于其中的每个复选框。

使用不同元素呈现的控件示例是TextBox 控件,根据其TextMode 属性,它将呈现为inputtextarea 元素。

Web 控件具有更多功能,但也使用更多资源。它们具有更多属性并支持主题和数据绑定等内容。许多 Web 控件将数据放在ViewState 中,作为页面的一部分发送。一不小心,ViewState 会变得很大,影响页面的加载时间。

【讨论】:

【参考方案2】:

ASP.NET 解析器将带有 runat="server" 标记的标准 html 元素解释为 html 服务器控件。示例:

<a runat="server"></a>

被解释为

<asp:HtmlAnchor runat="server"></asp:HtmlAnchor>

因此,请注意,如果您使用 runat="server",那么您使用的是相应的 HTML Server 控件。

此外,ASP.NET 包含一组 Web 服务器控件,即 HyperLink 控件,它提供更多功能、更多属性、事件等,但在某些情况下可能会更慢。

【讨论】:

+1 有些人认为向 HTML 控件添加 runat="server" 不会改变任何事情,而实际上他们正在将此控件转换为服务器控件。【参考方案3】:

我相信 ASP.NET 使用一组不同的 Web 服务器控件,这些控件通常具有更多功能,但这完全取决于您的喜好。如果您的工作主要是服务器端的,我会坚持使用 ASP.NET 控件。

【讨论】:

【参考方案4】:

我使用服务器 html 控件的唯一原因是当我需要灵活地编写自己的 html 但仍需要在代码中访问它的属性时。

<div id="mySpecialHtml" runat="server" />

在后面的代码中:

mySpecialHtml.InnerHtml = "something else";

【讨论】:

【参考方案5】:

我更喜欢在客户端有更多工作时使用 html 控件,而在服务器端有更多工作时使用 asp.net 控件(代码隐藏)。

【讨论】:

以上是关于何时在普通 HTML 上使用 runat="server"的主要内容,如果未能解决你的问题,请参考以下文章

MySQL索引的分类何时使用何时不使用何时失效?

在asp.net中如何做退出网页按钮?

何时最好在元素的“值”上使用“innerText”,反之亦然? HTML, JS

何时在 c# 中使用 ArrayList 而不是 array[]?

从 runat 服务器 asp.net 内部添加

如何在 asp.Net 的脚本标签上使用 runat="server"