如何通过其ID访问控件

时间:2014-06-14 11:12:39

标签: c# asp.net

在字符串中有一个控件ID,我可以知道它是文本框还是Rad Combo Box或RadDatePicker或任何此类属性?有什么功能可以得到它吗?我可以用反射吗?如果没有,请建议我做一些方法。我有一个名为invoice.ascx的用户控制页面,控件位于其父页面即invoice.aspx中。我只知道身份证。 我在invoice.ascx.cs

中尝试了以下代码
  string ID=txtPartyName;
  TextBox txt = this.Parent.FindControl(ID) as TextBox;

但在这里我必须知道它是一个TextBox。我将ID传递给一个将填充控件的函数。如果传递任何其他属性有帮助,请建议。提前谢谢!

2 个答案:

答案 0 :(得分:2)

以这种方式尝试:

Control ctrl = this.Parent.FindControl(ID);
if(ctrl is TextBox){
  TextBox txt = (TextBox)ctrl;
  //Do anything Textbox specific
}
if(ctrl is RadDatePicker){
  RadDatePicker rad = (RadDatePicker)ctrl;
  //Do anything RadDatePicker specific
}

如果你有几种可能的类型,可以使用switch(typeof(ctrl))来检查Type(所以不必编写那么多if子句。

如果你写下你的具体目标,也许会有更好的解决方案。

答案 1 :(得分:0)

  1. FindControl仅搜索当前命名容器下的控件。换句话说,它不会递归地找到它。您可能需要这样,具体取决于您的控制树结构。请参阅http://blog.codinghorror.com/recursive-pagefindcontrol/

  2. 在上面的一行中:TextBox txt = this.Parent.FindControl(ID)as TextBox

  3. 如果找到的控件不是文本框类型,则

    txt将为null。您可以利用此点来查找控件是否为文本框