2012-03-29 53 views
0

訪問控制我嘗試從ASPX訪問MainContentBlock控制,但未能如願。如何從父ASPX從其子ASCX

在我已經註冊了這兩個控件的aspx文件:

<uc3:ContentBlock ID="MainContentBlock" runat="server" DynamicParameter="id" DefaultContentID="3951" /></uc3> 

<uc3:childshow ID="Childshow" runat="server"/></uc3> 

在後面的代碼爲child.ascx

If Me.Parent.Page.FindControl("MainContentBlock") IsNot Nothing AndAlso Me.MainContentBlock.Item.Id = 4357 Then 

...

但錯誤說BC30456:' MainContentBlock'不是'child'的成員。

這幾乎像「.parent」部分沒有工作。

但是,如果我嘗試以下方法:

If Me.Parent.MainContentBlock IsNot Nothing AndAlso Me.MainContentBlock.Item.Id = 4357 Then 

...

它會彈出錯誤「BC30456: 'MainContentBlock' 不是的System.Web.UI的「一員。控制」。

,似乎它至少再次確認.parent一部分。

迷茫......請幫助,謝謝。

回答

1

這是因爲您試圖將MainContentBlock引用爲子控件的屬性。當您使用Me.MainContentBlock時,Me指的是子控件。

你只需要使用的FindControl,並適當引用發現控制:

Dim myBlock As ContentBlock = TryCast(Me.Parent.FindControl("MainContentBlock"), ContentBlock) 

If myBlock IsNot Nothing Then 
    'do things with myBlock 
End If 
+0

嗨,但我已經添加.Parent.FindControl()?我認爲這將訪問父aspx文件?對不起仍然困惑... – eastboundr 2012-03-29 19:32:57

+0

FindControl可能會找到該控件,但這不會更改引用或嘗試引用Me.MainContentBlock。 – 2012-03-29 19:35:07

+0

謝謝我想我看到問題出在哪裏... – eastboundr 2012-03-29 19:37:30

0

根據其中控制所在的頁面上,你可能需要遞歸地找到它,但在簡單的情況下,你就只是這樣做:

var pnl = Page.FindControl("MainContentBlock") as Panel; //or whatever it is 
if (pnl != null) 
{ 
    //your code here 
} 

這裏是一個遞歸方法,如果你需要它:

public Control FindControlRecursive(string controlID, Control parentCtrl) 
{ 
    foreach (Control ctrl in parentCtrl.Controls) 
    { 
     if (ctrl.ID == controlID) 
      return ctrl; 
     FindControlRecursive(controlID, ctrl); 
    } 
    return null; 
} 

而你也這樣稱呼它:

var pnl ((PageName)Page).FindControlRecursive("MainContentBlock") as Panel; 
+0

嗨,詹姆斯,謝謝,我想我設法讓孩子在aspx中找到控制權。不過,我也想訪問該用戶控件的屬性,如: 如果Me.Parent.FindControl(「MainContentBlock」)EkItem狀態並沒有沒有什麼然後.... 哪裏EkItem是控件的屬性。我在這一點上無法訪問EkItem,因爲它給了我錯誤: BC30456:'EkItem'不是'System.Web.UI.Control'的成員。 我做錯了什麼?謝謝。 – eastboundr 2012-03-29 19:47:07

+0

實際上我得到它的工作。謝謝! – eastboundr 2012-03-29 20:00:24

0

FindControl的作品,但痛苦的是你要找的東西可以直接在父級別越高則。這裏有一個方便的方法我使用:

public static Control FindControlRecursive(Control root, string id) 
{ 
    if (root.ID == id) 
     return root; 

    foreach (Control ctl in root.Controls) 
    { 
     Control foundCtl = FindControlRecursive(ctl, id); 

     if (foundCtl != null) 
      return foundCtl; 

    } 
    return null; 
} 
+0

謝謝,我想我找到了控制。但你知道我怎麼也能訪問它的財產?例如:Me.Parent.FindControl(「MainContentBlock」)。EkItem 其中EkItem是用戶Control的屬性。上面的行給我一個錯誤:BC30456:'EkItem'不是'System.Web.UI.Control'的成員。有任何想法嗎?謝謝 – eastboundr 2012-03-29 19:50:35

+0

現在工作,謝謝 – eastboundr 2012-03-29 20:00:34

+0

回答以前的評論:類型鑄造 – 2012-03-29 21:24:03