在字符串中有一个控件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传递给一个将填充控件的函数。如果传递任何其他属性有帮助,请建议。提前谢谢!
答案 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)
FindControl仅搜索当前命名容器下的控件。换句话说,它不会递归地找到它。您可能需要这样,具体取决于您的控制树结构。请参阅http://blog.codinghorror.com/recursive-pagefindcontrol/
在上面的一行中:TextBox txt = this.Parent.FindControl(ID)as TextBox
txt将为null。您可以利用此点来查找控件是否为文本框