Asp.net 网络控制与HtmlControl。Cos和pros在web表单应用程序中使用它们

Asp.net 网络控制与HtmlControl。Cos和pros在web表单应用程序中使用它们,asp.net,webforms,Asp.net,Webforms,在web窗体应用程序中,对于服务器代码,何时使用WebControl和何时使用HTMLControl?例如,如果我想在span标记内写入一些文本,我应该使用: <span id="someid" runat="server"></span> 或 我会使用span方法。无论您使用什么服务器控件,它最终都将呈现为html控件。 如果您的功能可以使用html控件完成,那么最好使用该控件。。 对于像数据网格这样的服务器控件,您可能需要通过使用html表编写更多代码来实现这些

在web窗体应用程序中,对于服务器代码,何时使用WebControl和何时使用HTMLControl?例如,如果我想在span标记内写入一些文本,我应该使用:

<span id="someid" runat="server"></span>


我会使用span方法。无论您使用什么服务器控件,它最终都将呈现为html控件。 如果您的功能可以使用html控件完成,那么最好使用该控件。。 对于像数据网格这样的服务器控件,您可能需要通过使用html表编写更多代码来实现这些功能。
在这种情况下,您可以使用服务器控件。

主要区别在于HTMLControl只提供在页面周期中寻址页面部分的方式,而WebControl是有状态的

在您的示例中,如果为标签文本指定一些值,它将在回发过程中保持该值

根据我的经验,如果可以的话,使用HTMLControl要好得多,因为它们更加轻量级,并且不会填满您的视图状态。当你需要网络控件有状态时,一定要使用它


例如,您可能希望为页面标题使用标签,因为您只能指定一次值(通常在
page\u OnLoad
中的
if(!IsPostBack)
块中)。您可能希望使用HTML范围来提供一些状态反馈(例如,在每次回发时更新状态)

asp:button的一个行为是它总是以输入类型=提交的形式呈现
而且asp:imagebutton总是以输入类型=image呈现

我不太确定HTMLControl是否“有状态”。如果在运行时填充一次范围的InnerText,它将在后续回发中保持。HTMLControl不是“有状态的”,这意味着,只有在上下文中,它的值不会使用page viewstate来回发送。但是,由于DOM在服务器端可用,显然您可以获得SPAN的值。我不认为上一个页面呈现的DOM在下一个页面循环中可用。您将获得原始DOM,可能在使用WebControl的地方进行了修改。另一方面,在回发过程中,SPAN的内容不会被回发。@sklivz:我很想告诉你,我只是做了一个快速测试,我输入的输入文本在回发过程中被保留。好的,让我们更精确一点:如果输入具有runat=“server”属性,它的状态将在回发过程中被保留。Span innertext属性(无论如何都不会作为表单的一部分发送)不会在回发中保留,即使使用runat=“server”属性也是如此。如果您没有重新发布,此帖子可能会有所帮助。不会直接回答你的问题。
<asp:Label id="someid" runat="server"></asp:Label>