C# 从用户控件操纵父页

C# 从用户控件操纵父页,c#,asp.net,webforms,user-controls,C#,Asp.net,Webforms,User Controls,我正在使用我只有二进制文件的web应用程序。该应用程序允许通过向派生类提供内部构件来开发扩展 我想要实现的是向现有的aspx页面添加额外的功能。因为我不能复制和修改相应的代码,所以我考虑开发一个UserControl并修改所讨论的aspx页面的标记以包含该控件 直到现在我还是成功的。控件出现在页面上并触发服务器事件处理程序。它还可以访问应用程序内部数据。我现在需要的是从UserControl服务器端以编程方式操作一些原始页面元素 我知道这不是用户控件的目的,他们不应该了解任何有关parrent页

我正在使用我只有二进制文件的web应用程序。该应用程序允许通过向派生类提供内部构件来开发扩展

我想要实现的是向现有的aspx页面添加额外的功能。因为我不能复制和修改相应的代码,所以我考虑开发一个UserControl并修改所讨论的aspx页面的标记以包含该控件

直到现在我还是成功的。控件出现在页面上并触发服务器事件处理程序。它还可以访问应用程序内部数据。我现在需要的是从UserControl服务器端以编程方式操作一些原始页面元素

我知道这不是用户控件的目的,他们不应该了解任何有关parrent页面元素的知识。然而,据我所知,这是将一些自定义功能包含到现有页面中的唯一方法

在我提出这个问题之前,我已经花了大量的时间研究可用的解决方案

请问,您能建议从服务器端的用户控件引用这些元素的最佳方式吗

下面是我迄今为止所做工作的简化代码表示

现有的aspx页面:


我也做过类似的事情,虽然我是针对变量而不是控件做的,所以我将尝试在这里进行调整

我使用属性来实现这一点,与以下方面合作:

<%@ 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[] { });