【问题标题】:asp.net: difference between runat="server" and server controlsasp.net:runat="server" 和服务器控件之间的区别
【发布时间】:2010-10-27 00:11:06
【问题描述】:

两者在功能上有什么区别

<asp:Button id="button1" Text="Click me" runat="server" OnClick="submitEvent" />

<input type="button" id="button1" runat="server" value="Click me" />

具有 runat="server" 属性的输入是否具有其他或有限的属性和方法?

谢谢!

【问题讨论】:

    标签: asp.net runatserver


    【解决方案1】:

    您的第二个选项甚至可能都行不通。 runat="server" 将直接呈现到 HTML 输出,它没有任何功能,只会破坏 HTML 验证。

    input 是一个 HTML 元素,它只有 HTML 属性,绝对没有任何类型的方法。

    【讨论】:

    • 第二个选项工作得很好,它也是一个服务器控件。它肯定有方法。
    • 太离谱了,第二种形式不仅有效而且有用,因为它没有被 ASP 抽象出来
    • 错了。第二个选项创建一个 System.Web.UI.HtmlControls.HtmlInputButton 实例,该实例将呈现为 (除非在 INamingContainer 中ID)。在代码隐藏中,您可以修改(除其他外)其样式集合、可见性;使用 FindControl() 并将处理程序附加到 ServerClick 事件。 IMO HtmlControls 相对于 WebControls 的主要优势是对标记的控制(用于样式和合规性)。
    • 那对我来说是新事物。
    • -1 - 对你一无所知的事情发表评论是个坏主意。
    【解决方案2】:

    没有与此类控件关联的服务器事件,但您可以在代码隐藏中使用它来更改其属性。

    【讨论】:

    • 嗯,它有一些服务器事件,如 Load 和 PreRender,但没有回发事件。
    • 实际上,单击 HtmlInputButton 将在结果回发期间触发 ServerClick 事件。不过,它没有相当于 Command 事件。
    【解决方案3】:

    前一行是 ASP.NET,后一行是简单的 XHTML。

    前者在服务器端进行解析和解释,然后生成 HTML 代码,这与您的第二个示例几乎对应。 ASP.NET 按钮实际上只是对 HTML 输入按钮功能的轻量级包装器,应该在需要处理服务器端的 Click 事件(或在一般情况下为任何事件)的任何地方使用,并且通常是要走的路,因为您让 ASP.NET 为您抽象了页面上按钮的概念。

    【讨论】:

      【解决方案4】:

      第一个创建System.Web.UI.WebControls.Button,而第二个创建System.Web.UI.HtmlControls.HtmlInputButton

      两者都是服务器控件,但WebControls 命名空间中的控件通常比HtmlControls 命名空间中的控件具有更多功能。通常他们会将一些数据放在ViewState 中以跟踪他们的状态,并且他们有服务器端回发事件。

      HtmlControls 命名空间中的每个控件都与一个 HTML 元素完全对应,而 WebControls 命名空间中的控件的呈现方式可能会有所不同,具体取决于请求页面的浏览器可以支持的内容。

      【讨论】:

        【解决方案5】:

        &lt;asp:Button runat="server".../&gt; 所代表的按钮将被转换为具有丰富状态模型和不同属性和方法的 Web 服务器控件,在现实世界中具有更清晰的表示,例如 Button.Text = "Click Me"。

        &lt;input type="button" runat="server"..../&gt;代表的按钮会被转换成HtmlInputButton代表的html服务器控件; with 具有有限的属性、方法和事件。大多数属性类似于 Button.Value="Click Me" 等 html 等价物。

        请注意,标记页面中的元素在使用之前会进行预处理/编译,并将转换为类表示,其中每个元素都由控件表示。您可以从后面的代码中访问由 runat="server" 标记标识的服务器端控件,因为它们将具有正确匹配的服务器控件(web/html),其他静态内容包括没有 runat= 的 &lt;input type="button.../&gt; 标记“服务器”将表示为 LiteralControl。

        【讨论】:

          【解决方案6】:

          这两个控件的功能是一样的,区别在于第一个是.net控件,第二个是html控件,可以通过使用来制作servercontrol

          runat="服务器"。

          第一个比第二个有丰富的事件和方法......

          【讨论】:

            猜你喜欢
            • 2021-04-03
            • 2010-11-02
            • 1970-01-01
            • 2011-07-08
            • 2012-12-11
            • 1970-01-01
            • 2011-02-23
            • 1970-01-01
            • 2016-06-05
            相关资源
            最近更新 更多