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?

4

3 回答 3

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

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

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

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

边注:

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

txtField1.Text = "value";

txtField1不是IDClientID实际上您是直接引用控件。

于 2012-08-28T19:59:45.847 回答
0

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

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

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

于 2012-08-28T20:02:47.063 回答
0

出于某种原因,它不喜欢 int: 调用 ToString() ,如下所示:

TextBox myTxtField = (TextBox)Page.FindControl("txtField" + (1).ToString());
于 2012-08-28T20:06:28.760 回答