簡體   English   中英

將控件中的對象強制轉換為其父控件中的類

[英]Cast an object in a control to a class in its parent control

我正在嘗試訪問當前控件的父控件的成員。

這是父母:

public partial class Controls_MyPanel : System.Web.UI.UserControl
{
    private String _strSubTitle = String.Empty;

    public String SubTitle
    {
        get { return _strSubTitle; }
        set
        {
            _strSubTitle = value;
            lblSubTitle.Text = _strSubTitle;
        }
    }
}

這是子控件:

public partial class Controls_MyChild : System.Web.UI.UserControl
{
    function ChangeSubTitle
    {
        ((Controls_MyPanel)Parent.Parent).SubTitle = "Foo";
    }
}

我不知道如何將Controls_MyPanel的定義轉換為Controls_MyChild。 我不能使用using因為我沒有名稱空間。 我嘗試添加類似的內容:

<%@ Register src="MyPanel.ascx" tagname="MyPanel" tagprefix="uc1" %>

MyChild的標記中,但是這當然是循環的,因為MyChild已在MyPanelMyPanel

如果您創建一個網站項目(使用ASP.net)而不是一個純ASP.net應用程序,則會發生這種情況。

File->New->Web Sites...

代替

File->New->Project...->Visual C#->Web->ASP.NET Web Application

在Web站點項目中,加載頁面時將動態編譯文件后面的代碼。 它們是孤立的,因此除非您在aspx / ascx文件中注冊,否則您將無法引用類的名稱,在這種情況下,這將創建循環依賴關系。

要解決此問題,如果您不想更改項目類型,則可以使用界面。

  1. 右鍵單擊網站項目,添加->添加新項...

  2. 選擇“類別”。 如果要將文件放置在App_Code中,Visual Studio將提示您。 是。

  3. 在生成的文件中,將public class ClassName更改為public interface ISomeInterface 然后定義一個屬性,例如String SubTitle {get; set;} String SubTitle {get; set;}

  4. 在父控件中實現該接口。

  5. 在您的孩子控件中,將Parent.ParentISomeInterface

然后,您可以通過ISomeInterface接口訪問SubTitle屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM