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

Ben*_*nny 22 html asp.net webforms

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

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

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

一个示例差异:

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

<div id="mySpecialHtml" runat="server" />
Run Code Online (Sandbox Code Playgroud)

Guf*_*ffa 18

两者都是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控件将根据其属性呈现为元素inputtextarea元素TextMode.

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


jru*_*ell 11

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

<div id="mySpecialHtml" runat="server" />
Run Code Online (Sandbox Code Playgroud)

代码背后:

mySpecialHtml.InnerHtml = "something else";
Run Code Online (Sandbox Code Playgroud)


Ram*_*ich 5

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

<a runat="server"></a>
Run Code Online (Sandbox Code Playgroud)

被解释为

<asp:HtmlAnchor runat="server"></asp:HtmlAnchor>
Run Code Online (Sandbox Code Playgroud)

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

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