为什么我必须指定runat="server"在我所有的ASP。在我有限的ASP知识中,服务器是唯一可用的选项。NET,我得到一个错误,如果我不使用它?
我知道我可以选择在我的HTML标记上使用它,我也知道客户机/服务器范例以及它实际指定的内容。
它是一个多余的标记,可以只是暗示控件是一个ASP。NET控制,还是有一个潜在的原因?
为什么我必须指定runat="server"在我所有的ASP。在我有限的ASP知识中,服务器是唯一可用的选项。NET,我得到一个错误,如果我不使用它?
我知道我可以选择在我的HTML标记上使用它,我也知道客户机/服务器范例以及它实际指定的内容。
它是一个多余的标记,可以只是暗示控件是一个ASP。NET控制,还是有一个潜在的原因?
当前回答
微软Msdn文章《被遗忘的控件:HTML服务器控件》以文本框<input type="text">为例解释了runat=" Server "的使用,将其转换为<input type="text" id="Textbox1" runat=" Server ">
Doing this will give you programmatic access to the HTML element on the server before the Web page is created and sent down to the client. The HTML element must contain an id attribute. This attribute serves as an identity for the element and enables you to program to elements by their specific IDs. In addition to this attribute, the HTML element must contain runat="server". This tells the processing server that the tag is processed on the server and is not to be considered a traditional HTML element.
简而言之,要启用对HTML元素的编程访问,请在其中添加runat="server"。
其他回答
在向ASP提交数据时。在服务器应用程序中,Runat = " server "所提到的控件将表示为Dot NET对象。您可以手动在HTML控件中键入代码,或者通过在设计视图中单击右键使用Run As Server选项。 ASP。一旦你将它从工具箱中拖出,NET控件将自动获得此属性,而通常HTML控件不会。
我一直相信,它是为了更好地理解你可以混合使用ASP。NET标签和HTML标签,HTML标签可以选择是否为runat="server"。保留标记并不会造成任何损害,并且会导致编译器错误将其删除。关于网络语言,你暗示的东西越多,对一个刚起步的程序员来说,学习它就越不容易。这是一个很好的理由来详细说明标签属性。
这段对话是Mike Schinkel和微软国家服务部的Talbot Crowell在他的博客上进行的。相关信息如下(第一段因出处语法错误而改述):
[…]但是<runat="server">的重要性更多地在于一致性和可扩展性。 如果开发人员必须标记一些标签(即<asp: />)。NET引擎忽略,那么标签之间的名称空间冲突和未来的增强也存在潜在的问题。通过要求<runat="server">属性,这将被否定。
它仍在继续:
如果所有客户端标记都需要<runat=client>,解析器将需要解析所有标记并去掉<runat=client>部分。
他继续说:
目前, 如果我猜对了,解析器 简单地忽略所有文本(标签或no 标记),除非它是带有 Runat =服务器属性或" <% " 前缀或ssi“<!- #include…(…) 此外,由于ASP。NET被设计成 允许网页设计师的分离 (foo.aspx) (foo.aspx.vb),网页设计师可以 使用自己的网页设计工具 放置HTML和客户端JavaScript 而不需要知道ASP。网 特定的标记或属性。
我怀疑这与在处理过程中如何识别服务器端控件有关。它不需要在运行时按名称检查每个控件以确定是否需要进行服务器端处理,而是根据标记对内部节点表示进行选择。编译器检查以确保在验证步骤中所有需要服务器标记的控件都有服务器标记。
我通常不喜欢猜,但这次我要猜了……
如果你还记得微软当年(2001年?)的。net营销炒作,那时候甚至还很难说。net是什么。是服务器吗?一个编程平台?一种语言?全新的东西?考虑到广告,它含糊地是你想要的任何东西——它只是解决了你可能遇到的任何问题。
所以,我猜ASP有一个隐藏的宏伟愿景。.NET代码可以在任何地方运行——服务器端或客户端,在与.NET运行时绑定的Internet Explorer副本中。Runat ="server"只是一个残余,因为它的客户端对等物从未进入生产环境。
还记得那些奇怪的广告吗?
相关:来自The Register的文章,介绍了一些。net历史。
微软Msdn文章《被遗忘的控件:HTML服务器控件》以文本框<input type="text">为例解释了runat=" Server "的使用,将其转换为<input type="text" id="Textbox1" runat=" Server ">
Doing this will give you programmatic access to the HTML element on the server before the Web page is created and sent down to the client. The HTML element must contain an id attribute. This attribute serves as an identity for the element and enables you to program to elements by their specific IDs. In addition to this attribute, the HTML element must contain runat="server". This tells the processing server that the tag is processed on the server and is not to be considered a traditional HTML element.
简而言之,要启用对HTML元素的编程访问,请在其中添加runat="server"。