将控件中的对象转换为其父控件中的 class
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
.
上注册了
如果您创建了一个网站项目(使用 ASP.net)而不是纯 ASP.net 应用程序,就会发生这种情况。
File->New->Web Sites...
而不是
File->New->Project...->Visual C#->Web->ASP.NET Web Application
在网站项目中,代码隐藏文件是在加载页面时动态编译的。它们是孤立的,因此您不能引用 class 的名称,除非您在 aspx/ascx 文件中注册,在您的情况下这会产生循环依赖。
解决问题,如果你不想改变项目类型,你可以使用界面。
右键单击网站项目,添加->添加新项目...
Select"Class"。 Visual Studio 将提示您是否要将文件放在 App_Code 中。是的
在生成的文件中,将 public class ClassName
更改为 public interface ISomeInterface
。然后定义一个属性像String SubTitle {get; set;}
在你的父控件中实现接口。
在您的子控件中,将 Parent.Parent
转换为 ISomeInterface
然后就可以通过ISomeInterface
界面访问SubTitle
属性
我正在尝试访问我当前控件的父控件的成员。
这是父级:
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
.
如果您创建了一个网站项目(使用 ASP.net)而不是纯 ASP.net 应用程序,就会发生这种情况。
File->New->Web Sites...
而不是
File->New->Project...->Visual C#->Web->ASP.NET Web Application
在网站项目中,代码隐藏文件是在加载页面时动态编译的。它们是孤立的,因此您不能引用 class 的名称,除非您在 aspx/ascx 文件中注册,在您的情况下这会产生循环依赖。
解决问题,如果你不想改变项目类型,你可以使用界面。
右键单击网站项目,添加->添加新项目...
Select"Class"。 Visual Studio 将提示您是否要将文件放在 App_Code 中。是的
在生成的文件中,将
public class ClassName
更改为public interface ISomeInterface
。然后定义一个属性像String SubTitle {get; set;}
在你的父控件中实现接口。
在您的子控件中,将
Parent.Parent
转换为ISomeInterface
然后就可以通过ISomeInterface
界面访问SubTitle
属性