如何从一个.ascx文件中获取变量并在另一个.ascx文件中使用?

4
我有两个 .ascx 文件,其中一个加载到另一个 .ascx 控件中的占位符中。
所以我有:
ParentControl
-> ChildControl
我想从 ChildControl 访问 ParentControl 以获取变量数据。
到目前为止,我有:
ParentControl.ascx
public UserList GetFunction
{
  get
  {
   return someVariable;
  }
}

在:

ChildControl.ascx

(注:此为文件名)
Protected void Page_Load(object sender, EventArgs e){

  ParentControl page = new ParentControl;
  string newVariable = page.GetFunction.someOtherVariable;
  }

当我在父类中返回someVariable时,它包含我需要的内容,但是当我尝试在ChildControl页面获取它时,GetFunction返回null。请问我错在哪里?

如果需要更多信息,请告诉我。

更新答案:

我已经通过绕过此问题来解决了它:

在父类中,我调用了一个在子类中定义的函数,并通过它传递了我需要的值。

ParentClass.ascx

protected void Page_Load
{
 ControlIWantToGetInformationTo.SetInfo(info);
}

ChildClass.ascx

public void SetInfo(Info info)
{
 string someString = info.TheVariableWithin;
}

有几个用户提到使用这段代码:

this.parent;

但由于我正在使用Sitecore CMS,因此this.parent返回了一个不需要的值,因为该页面一经通过Sitecore运行后就不是物理页面了。

感谢您的所有帮助,很高兴我成功解决了这个问题 :)。


1
你正在使用的方法(父页面/控件配置其子项的某些数据)是非常普遍、被接受和预期的做法。老实说,这种方法在封装方面比让子项访问其父项、假设其为某种类型并从中提取数据要好得多。因此,在我看来,你没有绕过问题——而是按照“应该”的方式解决了它。 - mikemanne
谢谢你的最佳实践提示,我之前没有意识到这一点,以后会注意的 :)。 - Anicho
3个回答

4

要在子类中访问父级控件,请使用子类的 "Parent" 属性:

protected void Page_Load(object sender, EventArgs e)
{
  ParentControl page = (ParentControl)this.Parent;

  if(page != null)  
    string newVariable = page.GetFunction();
}

希望这能帮到您。

this.Parent不起作用,因为不幸的是CMS Sitecore无法识别物理aspx页面,我将在一分钟内发布答案并修复问题以解释Sitecore问题以及为什么您的答案无法工作。 - Anicho
关于我的评论,如果有任何类似问题的人,请阅读以下内容。 - Anicho

3

我通过绕过此问题来解决了它:

在父类中,我调用了子类中定义的一个函数,并通过它传递了我需要的值。

ParentClass.ascx

protected void Page_Load {  

   ControlIWantToGetInformationTo.SetInfo(info); 
} 

ChildClass.ascx

public void SetInfo(Info info) 
{  string someString = info.TheVariableWithin; } 

有几位用户提到使用这段代码,

this.parent; 

但是因为我正在使用Sitecore CMS,所以this.parent返回了一个不需要的值,因为页面在通过Sitecore运行后不是物理页面。
感谢您所有的帮助,很高兴我成功解决了这个问题 :)。

1
创建一个新的父控件并不能让您访问当前控件父实例的设置。
您可以在用户控件中添加一个父页面属性,并在创建子控件时填充它。 您的控件没有 this.Parent 吗?

它有this.parent,但页面通过Sitecore CMS运行,这使得页面逻辑化,一旦发生这种情况,this.parent就会失败。否则它将是一个有效的答案。 - Anicho

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接