22

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

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

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

示例差异:

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

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

5 回答 5

19

两者都是 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控件,它将根据其属性呈现为元素input或元素。textareaTextMode

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

于 2012-07-12T21:52:48.657 回答
11

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

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

在后面的代码中:

mySpecialHtml.InnerHtml = "something else";
于 2012-07-12T20:31:21.200 回答
4

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

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

被解释为

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

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

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

于 2012-07-12T20:38:03.753 回答
1

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

于 2012-07-12T20:37:06.633 回答
1

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

于 2012-07-12T20:57:45.437 回答