C# 动态创建文本框会导致丢失“文本框”;名称“;属性

C# 动态创建文本框会导致丢失“文本框”;名称“;属性,c#,asp.net,C#,Asp.net,我使用以下代码向我的UserControl添加一个新的文本框: /// <summary> /// Create a new TextBox /// </summary> /// <returns>a new TextBox with the right name attribute</returns> private TextBox createTextBox() { TextBox textbox = new TextBox();

我使用以下代码向我的UserControl添加一个新的文本框:

/// <summary>
/// Create a new TextBox
/// </summary>
/// <returns>a new TextBox with the right name attribute</returns>
private TextBox createTextBox()
{
    TextBox textbox = new TextBox();        
    textbox.Attributes["name"] = name + "_" + (textBoxList.Count + 1);
    textbox.ID = name + "_" + (textBoxList.Count + 1);
    return textbox;
}
//
///创建一个新的文本框
/// 
///具有right name属性的新文本框
私有文本框createTextBox()
{
TextBox TextBox=新建TextBox();
textbox.Attributes[“name”]=name+“”+(textBoxList.Count+1);
textbox.ID=name+“”+(textBoxList.Count+1);
返回文本框;
}
在输出HTML上,此文本框的“name”属性已更改,并且添加了UserControl名称

<input name="multipleTextBox$test_1" type="text" id="multipleTextBox_test_1">


如何避免添加名称中的“MultipartTextBox$”部分?这很重要,因为我需要我唯一的名字是正确的…

默认情况下,你不能。这就是ASP.NET和控件名生成的工作方式,尤其是在用户控件中添加它时。这就是ASP.NET与客户端控件和命名冲突的区别。这是很正常的。为什么这对你很重要?为什么您需要在运行时访问元素?如果需要访问它,只需用户document.getElementById('multipleTextBox$test_xxx'):)

您可以将ClientIDMode设置为static,但我建议您不要这样做,除非您有充分的理由这样做-这将是ID,而不是名称

将设置为
static

TextBox textbox = new TextBox();        
textbox.ClientIDMode = ClientIDMode.Static;

您始终可以通过属性访问控件,以获取呈现控件ID和呈现控件名称。

我需要它,以便通过请求接收这些元素。表单集合…为什么不遍历表单集合,查看当前元素的名称是否以multipleTextbox$开头?如果是的话。。继续分析和迭代…:)use ClientIdMode仅将ID设置为static,但名称仍然包含同样多的multipleTextBox$。正如我所说,这就是ASP.NET为客户端呈现生成其ID的方式。-记住,这是用于ID而不是名称属性的。在我看来,一个允许我添加文本框或使用表单发送的其他控件的开发环境应该允许我决定哪个名称ID适合我。。。那只是wierd@AsafNevo:你说得对,我忽略了
名称
部分。我认为你不可能轻易改变这种行为。这是一个相关的问题: