通过传入字符串来引用Web控件的ID

时间:2012-08-28 19:55:56

标签: c# c#-4.0

如果我有:

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

然后在我的代码隐藏中,我可以通过其“ClientID”访问该Web控件:

txtField1.Text = "value";

这样可行,但我希望通过引用访问同一个Web控件的替代方法,所以我尝试这样做:

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

我收到错误:“对象引用未设置为对象的实例。”我是否正确这样做或是否有其他方法来引用Web控件的ID通过传递一个字符串?

3 个答案:

答案 0 :(得分:2)

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

如果控件位于MasterPage的ContentPage上,则返回null。然后你应该直接引用它(如下所示)。

我在这里写了一些关于这个问题的内容:https://stackoverflow.com/a/8781131/284240

当然,如果控件有另一个ID,或者它在另一个NamingContainer而不是页面(例如,在GridView中),它也将返回null。

旁注:

  

然后在我的代码隐藏中,我可以通过它访问该Web控件   “客户端ID”:

txtField1.Text = "value";

txtField1ID而不是ClientID,实际上您是直接引用该控件。

答案 1 :(得分:0)

这是一个有效的代码,必须正常工作

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

错误的原因可能是您没有asp:TextBox ID为"txtField1",或者文本框控件不在您的页面中

答案 2 :(得分:0)

由于某种原因,它不喜欢int:在它上面调用ToString():

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