【问题标题】:ASP.net, why does it use long element names?ASP.net,为什么它使用长元素名称?
【发布时间】:2011-03-21 09:14:02
【问题描述】:
<asp:Textbox runat="server" Id="Username" />

这可能呈现为:

<input type="text" id="ctl00_mainContent_Username" />

但如果我这样做,在 web.config 中:

<pages clientIDMode="Static">

这呈现为:

<input type="text" id="Username" />

我选择了第二个选项,因此客户端 ID 更简单且不是动态的,这意味着我可以将所有 Javascript 都放在外部,因为我不需要使用 Username.ClientID。

但是为什么要这样设计呢?为什么它会给东西起奇怪的名字?第二种方式似乎更容易使用。

【问题讨论】:

  • 第二个选项仅在 .Net 框架版本 4 中添加...webforms 自 .net 框架 1 以来一直存在

标签: asp.net html controls rendering


【解决方案1】:

它对 ID 进行了装饰,这样即使您在一个页面上多次使用该位服务器端标记,页面上也不会出现重复的 ID。

像大多数“自动装饰此名称,以便永远不会出现重复”方案一样,该名称最终又长又丑。

您必须记住,ASP.NET 的原始概念是没有人会查看输出的 HTML 或关心 ID 之类的细节,因为所有这些都是为您抽象出来的。所以一个简单、丑陋的名称装饰方案就可以了——它只是一个内部实现细节。

【讨论】:

    【解决方案2】:

    ClientID 背后的主要原因是用户控件。考虑在放置在同一页面上的 3 个不同的用户控件中拥有 2-3 个具有相同名称的文本控件。你将如何与另一个不同......

    【讨论】:

      【解决方案3】:

      简短的回答

      因为 Asp.net 将整个页面内容放在单个 FORM 元素中,因此可能会发生重复,并且使用此技术会尝试避免重复(成功)。

      较长的(呃)

      当整个页面位于单个FORM 中时,我们会冒输入名称重复的风险(考虑一个可编辑的实体列表,这些实体都具有相同的属性,这也会在输入中赋予它们相同的名称)。因此,Asp.net 根据命名容器(INamingContainer 接口)和计数来命名所有控件。这是避免任何名称冲突的最简单方法。

      当 Asp.net 1.0 出现时,并没有任何特别需要对这些控件进行不同的命名,但最近有了胖客户端应用程序(想想每个 ID 和客户端脚本的 CSS 样式)。

      事实证明,一个相当静态的页面也不会更改控件的难看 ID。会很长,是的,但在页面生命周期中不会真正改变。

      如果您改为使用静态模式,您将受益于拥有好(er)名称,但您应该注意它们的重复风险。

      【讨论】:

      • 哇,这是一个更长的答案:)
      • @Michael:那只是在给我争取时间...... :)
      【解决方案4】:

      我只是解释一下我所了解的。

      为了命名元素,ASP.net 根据其层次结构级别命名元素,例如,它在层次结构这样的页面中

      MasterPage // MasterPage has <asp:ContentPlaceHolder ID="mainContent" runat="server" />
          Page // textbox is inside the <asp:Content ID="Content1" ContentPlaceHolderId="mainContent" runat="server">
      

      母版页具有页面所在的 mainContent 容器控件。由于 ASP.net 位于单个表单中,因此 ASP.net 以这种方式命名它是为了元素的唯一性。 ct100是控件的前缀,每一个持有该控件的控件都是分层级联的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-07-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多