【问题标题】:Length limit of Control's Id in ASP.NetASP.Net中控件ID的长度限制
【发布时间】:2012-01-24 14:21:04
【问题描述】:

asp.net Web 应用程序中控件 id 的字符数限制是多少?

我有一个场景,我将使用 Random 函数生成控件 ID。

【问题讨论】:

  • What is a practical maximum length for HTML id? 的可能副本 没有实际的最大值,但有一个 HTML 规范规定了允许使用的字符。所以要小心你的随机函数。更不用说 Random 并不意味着唯一,而且 HTML 规范规定,id 必须是唯一的。
  • 为了唯一性,我正在为其添加时间戳。
  • 这可能有助于更多地了解您想要实现的目标。生成唯一 ID 可能有比每次调用随机函数更好的方法,这只会降低多个 ID 的机会。
  • 我正在创建一个包含好友列表的屏幕,最终用户可以继续添加好友。我需要添加标签和文本框。
  • 正如@Curt 所说,随机数,甚至时间戳,可能不是唯一的。我使用Guid.NewGuid().ToString().Replace('-', '_')(附加到某个前缀)作为(几乎保证!)唯一控件ID。

标签: asp.net


【解决方案1】:

在寻找关于生成随机 ID 作为额外的 SPAMBot 阻止机制的信息/想法时偶然发现了这一点,并认为我会回答。

正如 Darin 所指出的,虽然不是特定于 ASP.NET,但之前发布的以下问题的答案表明,100 万个字符已成功用作所有现代浏览器中的 HTML ID:

What is a practical maximum length for HTML id?

下面的快速 DOTNET 测试页面在 4.0 应用程序池中运行,证实 ASP.NET 可以很好地处理这个问题——尽管在那个大小下,加载页面并回发可能需要一分钟。请记住,“name”属性也具有“id”值,因此它实际上是加倍的。

我在 ID 接近 1000 万个字符时遇到了奇怪的浏览器行为,但如果您正在考虑使用这么大的 ID,您可能需要重新考虑一些事情 ;)

<script language="c#" runat="server">

    StringBuilder controlID = new StringBuilder();
    int controlIDLength = 1000000; // ONE MEEEEEEELLLLLION CHARACTERS!!!

    void Page_Init(object sender, EventArgs e)
    {
        // Create a really really long control ID
        for(int n = 1; n < controlIDLength; n++)
        {
            controlID.Append("A");
        }

        var TestControl = new System.Web.UI.WebControls.TextBox();
        TestControl.ID = controlID.ToString();
        ControlPlaceholder.Controls.Add(TestControl);
    }

    void Page_Load(object sender, EventArgs e)
    {
        ControlIDLengthLiteral.Text = "ControlID Length: " + controlIDLength.ToString();
        if (IsPostBack)
        {
            ControlValue.Text = "Value Received: " + ((TextBox)PageForm.FindControl(controlID.ToString())).Text;
        }
    }

</script>
<html>
    <head>
        <title>Maximum ID Length Test</title>
    </head>
    <body>
        <p>
            <asp:Literal ID="ControlIDLengthLiteral" runat="server" /><br />
            <asp:Literal ID="ControlValue" runat="server" />
        </p>
        <form id="PageForm" runat="server">
            <asp:PlaceHolder ID="ControlPlaceholder" runat="server" /><br />
            <input type="submit" value="Submit" />
        </form>
    </body>
</html>

【讨论】:

    【解决方案2】:

    它是数据类型字符串的控制属性。因此您可以添加一个值将采用到字符串变量中。

    【讨论】:

      猜你喜欢
      • 2014-06-28
      • 1970-01-01
      • 1970-01-01
      • 2012-02-29
      • 1970-01-01
      • 2010-10-15
      • 2014-03-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多