【问题标题】:When to use runat="server" on normal HTML何时在普通 HTML 上使用 runat="server"
【发布时间】: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" />

【问题讨论】:

    标签: asp.net html webforms


    【解决方案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 控件(代码隐藏)。

          【讨论】:

            猜你喜欢
            • 2011-06-16
            • 2012-03-20
            • 1970-01-01
            • 2011-08-16
            • 2014-02-23
            • 1970-01-01
            • 2012-04-29
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多