何时在普通 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
控件不会呈现为元素,它只输出其文本。还有其他控件本身不会呈现任何元素,例如Repeater
和PlaceHolder
控件。另一方面,CheckBoxList
控件例如呈现为几个 HTML 元素,table
作为容器,input
元素用于其中的每个复选框。
使用不同元素呈现的控件示例是TextBox
控件,根据其TextMode
属性,它将呈现为input
或textarea
元素。
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"的主要内容,如果未能解决你的问题,请参考以下文章
何时最好在元素的“值”上使用“innerText”,反之亦然? HTML, JS