2014-06-14 119 views
0

在字符串中有一個控件ID,我可以知道它的文本框或Rad組合框或RadDatePicker或任何此類屬性嗎?有沒有什麼功能可以得到它?我可以使用反射嗎?如果不是,請給我建議一些方法來做到這一點。我有一個名爲invoice.ascx的用戶控件頁面,控件位於其父頁面,即invoice.aspx。我只知道身份證。 我曾嘗試在invoice.ascx.cs如何通過ID訪問控件

string ID=txtPartyName; 
    TextBox txt = this.Parent.FindControl(ID) as TextBox; 

下面的代碼,但在這裏,我必須知道它是一個TextBox.I我路過ID的功能,這將填補controls.If傳遞任何其他財產幫助,請提前。感謝提前!

回答

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 
} 

如果你有幾個可能的類型,使用開關(typeof運算(CTRL))來檢查的類型(所以不要有寫if引導的從句這麼多

如果你寫你的具體目標,也許會有更好的解決方法。

+0

謝謝!我傳遞ID的函數是在類庫中,我無法使用System.Web.UI.Control.Your解決方案很好,但它不適用於Microsoft Visual Studio的類庫 – ABS

+0

您嘗試導入名稱空間? 「using System.Web.UI」 – markusvt

+0

是的,我試過了。我想我需要改變我的進一步邏輯。但是,現在我可以得到控制類型了,謝謝! – ABS

0
  1. 的FindControl只搜索當前的命名容器下的控制。換句話說,它不確實發現recursivel年。您可能需要這些,這取決於您的控制樹結構。見http://blog.codinghorror.com/recursive-pagefindcontrol/

  2. 在你上面的行:文本框的txt = this.Parent.FindControl(ID)作爲文本框

TXT將是零,如果發現控制的類型的文本框不。您可以利用這一點來查找控件是否爲文本框