C# 将控件中的对象强制转换为其父控件中的类
我正在尝试访问当前控件的父控件的成员 这是家长:C# 将控件中的对象强制转换为其父控件中的类,c#,asp.net,C#,Asp.net,我正在尝试访问当前控件的父控件的成员 这是家长: public partial class Controls_MyPanel : System.Web.UI.UserControl { private String _strSubTitle = String.Empty; public String SubTitle { get { return _strSubTitle; } set { _str
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";
}
}
我不知道如何将控件的定义放入控件中。我不能使用使用,因为我没有命名空间。我尝试添加一些类似的内容:
<%@ Register src="MyPanel.ascx" tagname="MyPanel" tagprefix="uc1" %>
添加到MyChild
的标记,但这当然是循环的,因为MyChild
已在MyPanel
上注册,如果您创建了一个网站项目(使用ASP.net)而不是纯ASP.net应用程序,则会发生这种情况
File->New->Web Sites...
而不是
File->New->Project...->Visual C#->Web->ASP.NET Web Application
在Web站点项目中,加载页面时动态编译代码隐藏文件。它们是隔离的,因此除非在aspx/ascx文件中注册,否则不能引用类的名称,在您的情况下,这将创建循环依赖关系
为了解决这个问题,如果您不想更改项目类型,可以使用接口
右键单击网站项目,添加->添加新项目
选择“类”。如果要将文件放入App_代码中,Visual Studio将提示您。对
在生成的文件中,将公共类类名
更改为公共接口
。然后定义一个属性,如stringsubtitle{get;set;}
在父控件中实现接口
在子控件中,将Parent.Parent
强制转换为isomoInterface
然后,您可以通过接口
接口访问SubTitle
属性。如果您创建了一个网站项目(使用ASP.net)而不是纯ASP.net应用程序,则会发生这种情况
File->New->Web Sites...
而不是
File->New->Project...->Visual C#->Web->ASP.NET Web Application
在Web站点项目中,加载页面时动态编译代码隐藏文件。它们是隔离的,因此除非在aspx/ascx文件中注册,否则不能引用类的名称,在您的情况下,这将创建循环依赖关系
为了解决这个问题,如果您不想更改项目类型,可以使用接口
右键单击网站项目,添加->添加新项目
选择“类”。如果要将文件放入App_代码中,Visual Studio将提示您。对
在生成的文件中,将公共类类名
更改为公共接口
。然后定义一个属性,如stringsubtitle{get;set;}
在父控件中实现接口
在子控件中,将Parent.Parent
强制转换为isomoInterface
然后,您可以通过接口
接口访问SubTitle
属性。如果您创建了一个网站项目(使用ASP.net)而不是纯ASP.net应用程序,则会发生这种情况
File->New->Web Sites...
而不是
File->New->Project...->Visual C#->Web->ASP.NET Web Application
在Web站点项目中,加载页面时动态编译代码隐藏文件。它们是隔离的,因此除非在aspx/ascx文件中注册,否则不能引用类的名称,在您的情况下,这将创建循环依赖关系
为了解决这个问题,如果您不想更改项目类型,可以使用接口
右键单击网站项目,添加->添加新项目
选择“类”。如果要将文件放入App_代码中,Visual Studio将提示您。对
在生成的文件中,将公共类类名
更改为公共接口
。然后定义一个属性,如stringsubtitle{get;set;}
在父控件中实现接口
在子控件中,将Parent.Parent
强制转换为isomoInterface
然后,您可以通过接口
接口访问SubTitle
属性。如果您创建了一个网站项目(使用ASP.net)而不是纯ASP.net应用程序,则会发生这种情况
File->New->Web Sites...
而不是
File->New->Project...->Visual C#->Web->ASP.NET Web Application
在Web站点项目中,加载页面时动态编译代码隐藏文件。它们是隔离的,因此除非在aspx/ascx文件中注册,否则不能引用类的名称,在您的情况下,这将创建循环依赖关系
为了解决这个问题,如果您不想更改项目类型,可以使用接口
右键单击网站项目,添加->添加新项目
选择“类”。如果要将文件放入App_代码中,Visual Studio将提示您。对
在生成的文件中,将公共类类名
更改为公共接口
。然后定义一个属性,如stringsubtitle{get;set;}
在父控件中实现接口
在子控件中,将Parent.Parent
强制转换为isomoInterface
然后,您可以通过isomoInterface
界面访问SubTitle
属性。您应该已经可以访问它了。除非您在不同的名称空间中定义了它们,否则它们位于同一名称空间中。您遇到了什么错误?只是说找不到类型或命名空间名称“Controls\u MyPanel”(您是否缺少using指令或程序集引用?
它们在同一个项目中?您应该已经可以访问它了。除非您在不同的名称空间中定义了它们,否则它们位于同一名称空间中。您遇到了什么错误?只是说找不到类型或命名空间名称“Controls\u MyPanel”(您是否缺少using指令或程序集引用?
它们在同一个项目中?您应该已经可以访问它了。除非您在不同的名称空间中定义了它们,否则它们位于同一名称空间中。您得到了什么错误?它只是说类型或名称空间名称'Controls\u MyP