2013-11-25 38 views
0

我有這樣的代碼到一個新的文本框添加到我的用戶:創建文本框的動態地使失去的「name」屬性

/// <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中的「名」這個文本框的屬性被改變,和UserControl名稱被添加...

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

我該如何避免名稱的「multiplartTextBox $」部分被添加?這很重要,因爲我需要我的獨特名稱是正確的...

回答

0

默認情況下,你不能。這就是ASP.NET和控件名稱生成的工作方式,特別是如果您將其添加到用戶控件中。這就是ASP.NET如何區分客戶端的控件和命名衝突。這很正常。你爲什麼對你很重要?爲什麼你需要在運行時訪問元素?如果您需要訪問它,只需用戶document.getElementById('multipleTextBox $ test_xxx'):)

您可以將ClientIDMode設置爲靜態,但是除非您有足夠的理由這麼做,否則我會建議您不要這樣做 - 是ID,而不是名稱

+0

我需要它以便讓那些通過Request.Form集合接收這些元素... –

+0

爲什麼不遍歷表單集合並查看當前元素的名稱是否以multipleTextbox $開頭?如果是的話..繼續解析和迭代.... :) –

+0

使用ClientIdMode只設置ID爲靜態,但名稱仍然包含multipleTextBox $ –

0

TextBox.ClientIDMode設置爲Static

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

ClientIDMode in ASP.NET 4.0

+0

這確實解決了id問題,但沒有名稱問題 –

+0

@AsafNevo:你說的對,我忽略了'Name'部分。我認爲你不能輕易改變這種行爲。這裏有一個相關的問題:http://stackoverflow.com/questions/4973947/asp-net-4-0-is-there-any-equivalent-of-clientidmode-for-the-names-of-inputs –