runat="server"
?编辑:感谢所有的答案,但我真正考虑的是在
<asp:
标记内部使用runat="server"
。runat="server"
?<asp:
标记内部使用runat="server"
。当您使用ASP.NET控件并/或需要在代码后端对这些控件进行编程访问时,请使用runat=server
属性。
HTML控件不需要此属性。如果您有任何HTML元素,如<span>
<div>
或<table>
,并且希望在代码后端中访问它们,则此属性非常有用。
<asp:Label runat="server" id="foo" />
<div runat="server" id="bar />
...
foo.Text = "Hello Label";
foo.Attributes["class"] = "baz";
您需要在任何要解析为服务器控件的控件上使用runat="server"
。
任何带有runat="server"
的元素都将被解析为页面层次结构中的服务器控件。其他任何内容都将被处理为纯文本,并放置在页面层次结构中的LiteralControl
控件中。
例外情况是不是真正的元素,而是另一个服务器标记内的特殊标记,例如ContentTemplate
标记。它们不需要runat="server"
,因为包含控件将对它们进行解析。
在运行时创建控件
我需要一个标签在运行时,此时不需要 runat="Server" 属性
示例
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Label lblNew = new Label();
lblNew.ID ="lblnew";
lblNew.Text ="Test";
}
}
当您不希望服务器端ASP.NET针对我们呈现服务器端变量时。
一般来说,当您不需要在服务器端操作DOM元素时,例如仅用于布局目的时,您不会使用它。
如果没有runat="server",也没有其他方法可以将html控件变成服务器端控件。这看起来很奇怪,因为你不能做runat="client"。
所以总结一下,在任何ASP .Net控件上都不能省略它,对于创建ASP .Net Web表单的开发人员来说,这可能是最简单和最干净的查找所有服务器端控件的方法。
来源:http://mikeschinkel.com/blog/whyrunatserverforaspnetpart2/
Tag runat="server" 表示脚本块中包含的代码将在服务器上运行(而不是在客户端上)。在执行时,ASP.NET 将创建包含此代码以及页面类的实例作为其给定类型的控件的实例(例如 System.Web.UI.WebControls.Textbox)的服务器端对象。该服务器端对象将在用户请求时被调用,并响应事件执行代码。