如果我有:
<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通过传递一个字符串?
答案 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";
txtField1
是ID
而不是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());