ASP.Net中Control的Id的长度限制

时间:2012-01-24 14:21:05

标签: asp.net

asp.net Web应用程序中控件ID的字符限制是什么?

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

2 个答案:

答案 0 :(得分:3)

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

正如Darin所指出的,虽然不是特定于ASP.NET,但以下发布的问题的答案表明在所有现代浏览器中已成功将1百万个字符用作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>

答案 1 :(得分:1)

它是数据类型string的控件属性。您可以添加一个将采用的字符串变量值。