[英]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
已在MyPanel
上MyPanel
。
如果您創建一個網站項目(使用ASP.net)而不是一個純ASP.net應用程序,則會發生這種情況。
File->New->Web Sites...
代替
File->New->Project...->Visual C#->Web->ASP.NET Web Application
在Web站點項目中,加載頁面時將動態編譯文件后面的代碼。 它們是孤立的,因此除非您在aspx / ascx文件中注冊,否則您將無法引用類的名稱,在這種情況下,這將創建循環依賴關系。
要解決此問題,如果您不想更改項目類型,則可以使用界面。
右鍵單擊網站項目,添加->添加新項...
選擇“類別”。 如果要將文件放置在App_Code中,Visual Studio將提示您。 是。
在生成的文件中,將public class ClassName
更改為public interface ISomeInterface
。 然后定義一個屬性,例如String SubTitle {get; set;}
String SubTitle {get; set;}
在父控件中實現該接口。
在您的孩子控件中,將Parent.Parent
為ISomeInterface
然后,您可以通過ISomeInterface
接口訪問SubTitle
屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.