C# 从用户控件操纵父页
我正在使用我只有二进制文件的web应用程序。该应用程序允许通过向派生类提供内部构件来开发扩展 我想要实现的是向现有的aspx页面添加额外的功能。因为我不能复制和修改相应的代码,所以我考虑开发一个UserControl并修改所讨论的aspx页面的标记以包含该控件 直到现在我还是成功的。控件出现在页面上并触发服务器事件处理程序。它还可以访问应用程序内部数据。我现在需要的是从UserControl服务器端以编程方式操作一些原始页面元素 我知道这不是用户控件的目的,他们不应该了解任何有关parrent页面元素的知识。然而,据我所知,这是将一些自定义功能包含到现有页面中的唯一方法 在我提出这个问题之前,我已经花了大量的时间研究可用的解决方案 请问,您能建议从服务器端的用户控件引用这些元素的最佳方式吗 下面是我迄今为止所做工作的简化代码表示 现有的aspx页面:C# 从用户控件操纵父页,c#,asp.net,webforms,user-controls,C#,Asp.net,Webforms,User Controls,我正在使用我只有二进制文件的web应用程序。该应用程序允许通过向派生类提供内部构件来开发扩展 我想要实现的是向现有的aspx页面添加额外的功能。因为我不能复制和修改相应的代码,所以我考虑开发一个UserControl并修改所讨论的aspx页面的标记以包含该控件 直到现在我还是成功的。控件出现在页面上并触发服务器事件处理程序。它还可以访问应用程序内部数据。我现在需要的是从UserControl服务器端以编程方式操作一些原始页面元素 我知道这不是用户控件的目的,他们不应该了解任何有关parrent页
我也做过类似的事情,虽然我是针对变量而不是控件做的,所以我将尝试在这里进行调整 我使用属性来实现这一点,与以下方面合作:
<%@ Register TagPrefix="uc" TagName="MyControl" Src="~/usercontrols/MyControl.ascx" %>
<uc:MyControl ID="pnlMyControl" runat="server" />
然后在父页面中,您可以设置这些属性;例如:
protected void Page_Load(object sender, EventArgs e)
{
pnlMyControl.myTextBox = MyParentTextBox;
}
而且,你可能会发现这很有用;您可以使用以下命令从用户控件直接在父级上激发方法:
this.Page.GetType().InvokeMember("MyMethodName", System.Reflection.BindingFlags.InvokeMethod, null, this.Page, new object[] { });
我希望这能有所帮助。不幸的是,我无法编辑家长的页面代码,因为我只有二进制代码。很抱歉,我错过了这一点。您可以尝试通过Parent.Controls和/或Parent.FindControls路由到它们可能的重复项
private string _myTextBox = new TextBox();
public string myTextBox
{
get
{
return _myTextBox;
}
set
{
_myTextBox = value;
}
}
protected void Page_Load(object sender, EventArgs e)
{
pnlMyControl.myTextBox = MyParentTextBox;
}
this.Page.GetType().InvokeMember("MyMethodName", System.Reflection.BindingFlags.InvokeMethod, null, this.Page, new object[] { });