【问题标题】:Manipulating parent page from User Control从用户控件操作父页面
【发布时间】:2015-04-30 09:38:56
【问题描述】:

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

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

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

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

在我问这个问题之前,我花了很多时间研究可用的解决方案。

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

下面是我到目前为止所做的简化代码表示

现有的aspx页面:

// SOME CONTENT OF THE ORGINAL PAGE

<%@ Register TagPrefix="uc" TagName="MyControl" Src="~/usercontrols/MyControl.ascx" %>

// SOME CONTENT OF THE ORGINAL PAGE

<uc:MyControl ID="pnlMyControl" runat="server"></uc:MyControl>

// SOME CONTENT OF THE ORGINAL PAGE

我的用户控制:

public partial class MyControl : System.Web.UI.UserControl
{
    protected void Page_Load(object sender, EventArgs e)
    {
        //DO SOMETHING HAVING ACCESS TO INTERNAL DATA
    }

    protected void lnkTest_Click(object sender, EventArgs e)
    {
        //DO SOMETHING HAVING ACCESS TO INTERNAL DATA
    }
}

【问题讨论】:

标签: c# asp.net webforms user-controls


【解决方案1】:

我也做过类似的事情,虽然我是为变量而不是控件做的,所以我将尝试在此处进行调整。

我使用属性来实现这一点,使用:

<%@ Register TagPrefix="uc" TagName="MyControl" Src="~/usercontrols/MyControl.ascx" %>

<uc:MyControl ID="pnlMyControl" runat="server" />

在 UserControl 中,您可以执行以下操作:

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

希望对你有帮助。

【讨论】:

  • 不幸的是我无法编辑父页面代码,因为我只有二进制文件。
  • 对不起,我错过了那一点。您可以尝试通过Parent.Controls 和/或Parent.FindControl() 路由到他们
猜你喜欢
  • 1970-01-01
  • 2011-06-29
  • 2010-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多