ASP.NET:runat =“server”和服务器控件之间的区别

11

这两者之间的功能区别是什么?

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

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

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

谢谢!

6个回答

21
第一个创建的是System.Web.UI.WebControls.Button,而第二个创建的是System.Web.UI.HtmlControls.HtmlInputButton
两者都是服务器控件,但在WebControls命名空间中的控件通常比HtmlControls命名空间中的控件具有更多的功能。通常它们会将一些数据放入ViewState中以跟踪它们的状态,并且它们有服务器端回发事件。 HtmlControls命名空间中的每个控件都对应于一个HTML元素,而WebControls命名空间中的控件可能根据请求页面的浏览器支持情况以不同的方式呈现。

1

使用<asp:Button runat="server".../>表示的按钮将被转换为具有丰富状态模型、不同属性和方法的 Web 服务器控件,其在实际应用中的表示更加清晰,例如 Button.Text = "Click Me"。

使用<input type="button" runat="server"..../>表示的按钮将被转换为 HtmlInputButton 表示的 html 服务器控件;具有有限的属性、方法和事件。大多数属性类似于 HTML 等效项,如 Button.Value="Click Me"。

请注意,在使用前,标记页中的元素会被预处理/编译,并将转换为类表示形式,其中每个元素都由控件表示。您可以从代码后台访问通过 runat="server" 标记标识的服务器端控件,因为它们将具有正确匹配的服务器控件(Web/HTML),其他静态内容,包括没有 runat="server" 的 <input type="button.../> 标记将表示为 LiteralControl。


0

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

前者在服务器端进行解析和解释,之后生成HTML代码,这基本上对应于您的第二个示例。 ASP.NET按钮实际上只是轻量级包装器,可在需要在服务器端处理Click事件(或通常情况下任何事件)的任何位置使用,并且通常是最好的选择,因为您可以让ASP.NET为您抽象页面上的按钮的概念。


0

这两个控件的功能是相同的,区别在于第一个是.net控件,第二个是html控件,可以通过使用runat="server"使其成为服务器控件。

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


-1

这种控件没有与之关联的服务器事件,但您可以在代码后台中使用它来更改其属性。


它有一些服务器事件,如Load和PreRender,但没有postback事件。 - Guffa
实际上,单击HtmlInputButton将在导致的回发期间触发ServerClick事件。但它没有Command事件的等效项。 - stevemegson

-3
你的第二个选项可能甚至都不会起作用。runat="server"将直接呈现到HTML输出中,在那里它将没有任何功能,只会破坏HTML验证。
input是一个仅具有HTML属性且绝对没有任何方法的HTML元素。

2
第二个选项完全没问题,而且它也是一个服务器控件。它肯定有方法。 - Guffa
完全走样了,第二种形式不仅有效,而且有用,因为它没有被 ASP 抽象化。 - annakata
错误。第二个选项创建了一个System.Web.UI.HtmlControls.HtmlInputButton的实例,它将被呈现为<input type="button" id="button1" value="Click me" />(除非在INamingContainer内,这将混淆id)。在代码后台中,您可以修改(除其他外)其Style集合、Visibility;使用FindControl()并附加处理程序到ServerClick事件。在我看来,HtmlControls相对于WebControls的主要优点是对标记的控制(用于样式和合规性)。 - Conceptdev
1
那对我来说是新鲜事。 - User
-1 - 对于你一无所知的事情进行评论是一个不好的主意。 - Venemo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接