我正在处理我只有二进制文件的Web应用程序。该应用程序允许通过为派生类提供内部来开发扩展。
我想要实现的是在现有的aspx页面中添加其他功能。因为我无法复制和修改相应的代码,所以我考虑开发UserControl并修改所讨论的aspx页面的标记以包含该控件。
直到现在我才成功。控件显示在页面上并触发服务器事件处理程序。它还可以访问应用程序内部数据。我现在需要的是以编程方式操作UserControl服务器端的一些原始页面元素。
我知道这不是用户控件的目的,他们不应该对parrent页面元素有任何了解。但是,据我所知,这是将一些自定义功能包含在现有页面中的唯一方法。
在我提出这个问题之前,我花了很多时间研究可用的解决方案。
请您,您能否建议在服务器端使用用户控件引用这些元素的最佳方式?
下面是我到目前为止所做的简化代码表示
现有的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
}
}
答案 0 :(得分:0)
我已经做了类似的事情,虽然我已经为变量而不是控件做了这些,所以我将尝试在这里进行调整。
我使用属性来实现这一点,使用:
<%@ 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[] { });
我希望有所帮助。