动态创建TextBox会导致丢失“name”属性

时间:2013-11-25 15:18:57

标签: c# asp.net

我有这个代码将新的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;
}
输出HTML上的

更改了此TextBox的“name”属性,并添加了UserControl名称...

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

我怎样才能避免添加名称的“multiplartTextBox $”部分?这很重要,因为我需要我的独特名称才是正确的......

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

TextBox.ClientIDMode设置为Static

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

ClientIDMode in ASP.NET 4.0

答案 2 :(得分:0)

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