2012-08-29 81 views
0

我有一個ASPX頁面中的2個用戶控件。默認情況下,第二個用戶控件應該被禁用。在那個用戶控件中,我只有一個文本框。所以我找到這樣的頁面加載事件的控制:如何從代碼隱藏中禁用用戶控件?

TextBox txtLocation = (TextBox)PI_CompLocationTree.FindControl("txtLocation"); 
txtLocation.Enabled = false; 

但我得到txtLocation爲空。如何從ASCX控件的ASPX頁面獲得控件?

我的更新Code..In aspx頁面..

<%@ Register Src="~/UserControl/PI_CompLocationTree.ascx" TagName="PI_CompLocationTree" 
TagPrefix="uc1" %> 

<div id="Div2"> 
    <div class="location"> 
     <div class="usLocation"> 
      <uc1:PI_CompLocationTree ID="PI_CompLocationTree1" runat="server"/> 
     </div> 
    </div> 
</div> 

在頁面加載...

在ASCX頁面...

<asp:TextBox ID="txtLocation" CssClass="fadded_text fadded_text_ctrl" Style="width: 260px; 
float: left;" runat="server" Text=""></asp:TextBox> 

在ASCX代碼後面...

public partial class PI_CompLocationTree : System.Web.UI.UserControl 
{ 
    public bool EnabledTextBox 
    { 
     get { return txtLoc.Enabled; } 
     set { txtLoc.Enabled = value; } 
    } 
} 
+0

首先'aspx'是'page'但'ascx'是'Control'不要將此定義 – harry180

+0

我不是mixing..I想從ASCX TextBox控件,我應該禁用從我的ASPX代碼後面... – RobinHood

+0

你的問題現在有這樣的意義: 你在1 aspx有2個控件。 想要從代碼隱藏的第二個「控制」中更改'TextBox'' property''Enabled'在1-st'Control'中。如果你希望從'aspx'代碼背後改變這個'property'而不是第二個'Control'的ascx,那麼只需像之前發佈的@Candie這樣的屬性。把你的問題重寫成可以理解的。 – harry180

回答

1

使用的FindControl方法如下..

1. UserControlClass objOfUserControl = (UserControlClass)Page.FindControl("UserControlID"); 
    TextBox txtLocation= objOfUserControl.FindControl("txtLocation"); 
    txtLocation.Enabled = false; 

2。你也可以使用公共屬性如下

在用戶控件代碼隱藏

public bool TextBoxUSC 
{ 
    set{txtLocation.Enabled = value;} 
} 

在.aspx的代碼背後

UserControlClass.TextBoxUSC=false; 

如果您使用的是母版頁

ContentPlaceHolder cph = (ContentPlaceHolder)this.Page.Master.FindControl("MainContent");//"MainContent" is ContentPlaceHolder's ID 

    UserControlClass userCntrl = (UserControlClass)cph.FindControl("UserControlID"); 
    userCntrl.TextBoxUSC = false; 
+0

這是什麼」UserControlClass「在您的代碼... – RobinHood

+0

公共部分類MyUserControl:System.Web.UI.UserControl ...這裏MyUserControl是一個類 –

+0

好的...這是什麼(「UserControlID」); ....我有USerControl的任何ID ... – RobinHood

0

羅賓您可以刪除

TextBox txtLocation = (TextBox)PI_CompLocationTree.FindControl("txtLocation"); 
txtLocation.Enabled = false; 

在你的aspx,添加形式與RUNAT = 「服務器」

也刪除

PI_CompLocationTree PI_CompLocationTree = new PI_CompLocationTree(); 

你不需要因爲你用的FindControl

您的工作很好

+0

他想從父母控制不是孩子... – harry180

+0

是的,你是在你的aspx,你訪問DisableTextBox 誰是你的usercontrol的公共財產 –

+0

再讀一遍更精確的問題 – harry180

1

Try t他

編輯

請在ASPX Enabledfalse你可以這樣:

添加屬性到您的UC:然後

public bool EnabledTextBox 
{ 
    get{return IdTextBox.Enabled;} 
    set{IdTextBox.Enabled=value;} 
} 

在ASPX:

IdOfYourUserControlWithProperty.EnabledTextBox = false; 

Ho PE可以幫助

+0

我在「PI_CompLocationTree」中得到錯誤,因爲'System.web.ui.page'沒有包含PI_CompLocationTree的定義.... – RobinHood

+0

什麼是'PI_CompLocationTree'?有它'runat =「服務器」'屬性? – harry180

+0

PI_CompLocationTree是我的UC名稱...在這我有txtLocation文本框,它有runat服務器.... – RobinHood

0
PI_CompLocationTree1.EnabledTextBox = false; //from .aspx page. There's no need to use FindControl if you've added it statically to the webpage.