【问题标题】:Reference web control's ID by passing in a string通过传入字符串来引用 Web 控件的 ID
【发布时间】:2012-08-28 19:55:56
【问题描述】:

如果我有:

<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通过传入一个字符串?

【问题讨论】:

  • 有趣的是,如果您将文本框切换为文字,它可以正常工作。
  • 哈哈,是的,我以前见过这样的行为。我现在已经让它工作了,但我很失望它不会通过引用更新 - 它会复制我正在尝试更新的元素。
  • 查看我的答案 - 它对我来说是参考。

标签: c# c#-4.0


【解决方案1】:
TextBox myTxtField = (TextBox)Page.FindControl("txtField" + 1);

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

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

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

旁注:

然后在我的代码隐藏中,我可以通过它的 “客户 ID”:

txtField1.Text = "value";

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 你是对的,但编译器希望它包含在 try/catch 中或检查 null,我应该从我得到的错误中得到它。
    【解决方案3】:

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

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

    【讨论】:

    • 如果您先将 int 放入变量中,它也可以: int num = 1;文本框 myTxtField = (TextBox)Page.FindControl("txtField" + num);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-14
    • 2014-08-11
    • 2017-07-25
    • 2016-07-05
    • 2013-04-07
    • 1970-01-01
    • 2018-09-01
    相关资源
    最近更新 更多