为什么我必须指定runat="server"在我所有的ASP。在我有限的ASP知识中,服务器是唯一可用的选项。NET,我得到一个错误,如果我不使用它?
我知道我可以选择在我的HTML标记上使用它,我也知道客户机/服务器范例以及它实际指定的内容。
它是一个多余的标记,可以只是暗示控件是一个ASP。NET控制,还是有一个潜在的原因?
为什么我必须指定runat="server"在我所有的ASP。在我有限的ASP知识中,服务器是唯一可用的选项。NET,我得到一个错误,如果我不使用它?
我知道我可以选择在我的HTML标记上使用它,我也知道客户机/服务器范例以及它实际指定的内容。
它是一个多余的标记,可以只是暗示控件是一个ASP。NET控制,还是有一个潜在的原因?
当前回答
并非所有可以包含在页面中的控件都必须在服务器上运行。例如:
<输入类型=“submit”runat=服务器/>
这本质上与:
<asp:Button runat=server />
从第一个按钮中删除runat=server标记,您就有了一个在浏览器中运行的标准HTML按钮。支持和反对在服务器上运行特定控件的理由有很多,而ASP。NET根据所包含的HTML标记“假定”您想要的内容。为<asp:XXX />控件家族“推断”runat=server可能是可能的,但我猜微软会认为这是对标记语法和asp。净引擎。
其他回答
非常多余的属性,考虑到“asp”标记显然是一个asp元素,应该足以将其标识为服务器端可访问元素。
然而,在其他地方,它用来提升普通标记以用于代码背后。
在向ASP提交数据时。在服务器应用程序中,Runat = " server "所提到的控件将表示为Dot NET对象。您可以手动在HTML控件中键入代码,或者通过在设计视图中单击右键使用Run As Server选项。 ASP。一旦你将它从工具箱中拖出,NET控件将自动获得此属性,而通常HTML控件不会。
我认为微软可以通过让编译器在页面编译之前添加runat属性来解决这种歧义,就像java在泛型中所具有的类型擦除一样,而不是擦除,它可以在看到asp:标签前缀的任何地方写入runat=server,因此开发人员不需要担心它。
runat="Server"表示HTML“控件”将回发到服务器。
Web表单不断地使用回发来通知服务器处理页面控制事件。
. net MVC页面不使用回发(表单“submit”除外)。MVC依赖JQUERY在客户端管理页面(因此绕过了向服务器发送大量回发消息的需要)。
所以: .NET Web表单…在页面标记中经常使用“runat”属性。
. net MVC很少在页面标记中使用“runat”属性。
希望这有助于澄清为什么runat是必要的…
它的存在是因为ASP . net中的所有控件都继承自System.Web.UI.Control,后者具有“runat”属性。
在System.Web.UI类中。HTMLControl,这个属性不是必需的,但是在System.Web.UI.WebControl类中,这个属性是必需的。
编辑: 让我说得更具体一点。因为asp.net基本上是HTML的抽象,所以编译器需要某种指令,以便它知道特定的标签需要在服务器端运行。如果该属性不存在,则不知道首先在服务器上处理它。如果它不存在,它会假设它是常规标记并将其传递给客户端。