为什么ASP.NET webforms需要Runat ="Server"属性?

joh*_*hnc 202 asp.net runatserver

为什么我必须runat="server"在所有ASP.NET控件上指定它是必需属性,并且server是我对ASP.NET知识有限的唯一选项,如果我不使用它,我会收到错误?

我明白我可以选择在我的HTML标签上使用它,并且我理解客户端/服务器范例以及它实际指定的内容.

它是一个冗余标记,可能只是由控件作为ASP.NET控件隐含,还是有潜在的原因?

Geo*_*ker 110

我一直认为,有更多的理解是你可以混合使用ASP.NET标签和HTML标签,HTML标签可以选择是否存在runat="server".保留标签不会造成任何损害,并且会导致编译器错误将其取出.你对Web语言的暗示越多,新手程序员进入和学习它就越不容易.对于标签属性来说,这是一个很好的理由.

这次谈话发生在迈克·辛克尔的博客之间,他自己和微软国民服务公司的塔尔博特·克罗威尔之间.相关信息如下(第一段由于语法错误而被解释):

[...]但重要性<runat="server">更多的是一致性和可扩展性.

如果开发人员必须<asp: />为ASP.NET引擎标记某些标记(即),那么标记之间的命名空间冲突和未来增强也可能存在问题.通过要求<runat="server">属性,这被否定.

它继续:

如果<runat=client>所有客户端标记都需要,则解析器需要解析所有标记并去掉<runat=client>部分.

他继续:

目前,如果我的猜测是正确的,解析器只是忽略所有文本(标签或没有标签),除非它是带有runat=server属性或" <%"前缀或ssi" 的标签 <!– #include...... (...) 另外,因为ASP.NET是设计的为了让Web设计人员(foo.aspx)与Web开发人员(foo.aspx.vb)分离,Web设计人员可以使用自己的Web设计工具来放置HTML和客户端JavaScript,而无需了解ASP.NET特定标签或属性.

  • 无论是什么原因,它仍然是PITA必须为每个<asp:>标签键入它,它可以安全地作为默认值. (58认同)

Cor*_*rch 33

我通常不喜欢猜测,但我会在这个...

如果你还记得微软当时的.NET营销炒作(2001年?),那么很难说出.NET甚至是什么.它是服务器吗?一个编程平台?一种语言?什么新东西完全?鉴于这些广告,它的含糊不清是你想要的 - 它只是解决了你可能遇到的任何问题.

所以,我的猜测是,ASP.NET代码可以在任何地方运行隐藏的宏观愿景 - 服务器端或客户端,在与.NET运行时绑定的Internet Explorer副本中.runat ="server"只是一个残留的遗留物,因为它的客户端等价物从未投入生产.

还记得那些奇怪的广告吗?

相关:文章来自注册一些.NET历史.

  • 你碰巧有一个链接到一个有任何"怪异广告"的网站? (5认同)

Dav*_*sky 13

并非所有可包含在页面中的控件都必须在服务器上运行.例如:

<INPUT type="submit" runat=server />

这基本上与以下相同:

<asp:Button runat=server />

从第一个中删除runat = server标记,并且您有一个在浏览器中运行的标准HTML按钮.有理由支持和反对在服务器上运行特定控件,并且ASP.NET无法根据您包含的HTML标记"假设"您想要的内容.有可能"推断" <asp:XXX />控件系列的runat = server ,但我的猜测是微软会认为这是对标记语法和ASP.NET引擎的攻击.

  • 该元素仍然位于客户端的DOM中,因此仍然可以使用javascript/jQuery对其进行修改.但是,使用服务器呈现的元素可能会很棘手,特别是对于动态控件. (3认同)
  • 如果控件正在服务器上运行,这是否意味着您无法使用Javascript选择元素?例如document.getElementsById("tvns:treeview"); (2认同)

dis*_*ame 8

Microsoft Msdn文章遗忘控件:HTML服务器控件<input type="text">通过将其转换为文本框中的示例解释了runat ="server"的使用<input type="text" id="Textbox1" runat="server">

执行此操作将使您在创建网页并将其发送到客户端之前以编程方式访问服务器上的HTML元素.HTML元素必须包含id属性.此属性用作元素的标识,使您可以按特定ID对元素进行编程.除此属性外,HTML元素还必须包含runat ="server".这告诉处理服务器标签在服务器上处理,不被视为传统的HTML元素.

简而言之,要启用对HTML元素的编程访问,请添加runat="server"它.

  • @nhahtdh答案是:"启用对HTML元素的编程访问".:) (3认同)
  • 没有解决这个问题,这就是为什么在ASP.NET标签上必须使用runat ="server". (2认同)
  • OP知道标签的含义及其作用.问题是在语言设计方面提出要求 - 是什么让设计师决定甚至ASP.NET标签需要用runat ="server"标记才能在服务器端运行. (2认同)
  • 我没有答案,但最重要的答案解决了这个问题(正确与否).你的答案没有,这就是我评论的原因. (2认同)