2012-08-28 77 views
0

如果我有:參考Web控件的ID

txtField1.Text = "value"; 

這一工程:

<asp:TextBox ID="txtField1" runat="server"></asp:TextBox> 

然後在我的代碼隱藏我可以通過它的「客戶端ID」訪問Web控件,但我想訪問引用相同的Web控制的另一種方法,所以我試圖做這樣說:

TextBox myTxtField = (TextBox)Page.FindControl("txtField" + 1); 
myTxtField.Text = "value"; 

而且我得到錯誤:「對象引用未設置爲對象的實例」。任何想法,如果我這樣做的權利,或者如果有另一種方式通過傳遞字符串引用Web控件的ID?

+0

有趣的是,如果將文本框切換爲文字,它可以正常工作。 – MaxPRafferty

+0

哈哈是啊,我以前見過這樣的行爲。我現在已經開始使用它了,但是我很失望它不會通過引用進行更新 - 它會複製我嘗試更新的元素。 – BumbleB2na

+0

看到我的答案 - 它適用於我的參考。 – MaxPRafferty

回答

2
TextBox myTxtField = (TextBox)Page.FindControl("txtField" + 1); 

如果控件坐在MasterPage的ContentPage上,則返回null。然後你應該直接引用它(如下所示)。

我寫關於這個問題的東西在這裏:https://stackoverflow.com/a/8781131/284240

當然,它也將或者返回null如果控件有另一個ID,如果它在另一個NamingContainer比頁(f.e在GridView)。

旁註:

Then in my code-behind I can access that web control by its "ClientID":

txtField1.Text = "value"; 

txtField1ID不是ClientID,實際上你直接引用的控制。

0

這是一個有效的代碼且必須

TextBox myTxtField = (TextBox)Page.FindControl("txtField" + 1); 
myTxtField.Text = "value"; 

錯誤的原因可能是要麼你沒有asp:TextBox ID爲"txtField1"或文本框控件是不是在你的頁面

+0

你是對的,但編譯器希望它包含在try/catch中,或者檢查null,我應該從我得到的錯誤中找到它。 – BumbleB2na

0

對於一些因爲它不喜歡int:調用ToString(),因此:

TextBox myTxtField = (TextBox)Page.FindControl("txtField" + (1).ToString()); 
+0

如果你把int放入一個變量中,它也可以工作: int num = 1; TextBox myTxtField =(TextBox)Page.FindControl(「txtField」+ num); – MaxPRafferty