我有一个Default.aspx页面,我在其中使用了一个usercontrol。在usercontrol.cs的某些条件下,我必须调用Default.aspx.cs页面中存在的函数(即用户控件的父页面)。请帮忙告诉我完成这项任务的方法。
答案 0 :(得分:0)
您必须将Page
属性强制转换为实际类型:
var def = this.Page as _Default;
if(def != null)
{
def.FunctionName();
}
该方法必须公开:
public partial class _Default : System.Web.UI.Page
{
public void FunctionName()
{
}
}
但请注意,这不是最佳做法,因为您要将UserControl
与Page
进行硬链接。通常,UserControl的一个目的是可重用性。这里不再了。从UserControl
与其页面进行通信的最佳方式是使用可由页面处理的自定义事件。
Mastering Page-UserControl Communication - event driven communication
答案 1 :(得分:0)
向用户控件添加事件:
public event EventHandler SpecialCondition;
满足条件时,在用户控件中引发此事件:
private void RaiseSpecialCondition()
{
if (SpecialCondition != null) // If nobody subscribed to the event, it will be null.
SpecialCondition(this, EventArgs.Empty);
}
然后在包含用户控件的页面中,监听事件:
public partial class _Default : System.Web.UI.Page
{
public void Page_OnLoad(object sender, EventArgs e)
{
this.UserControl1.OnSpecialCondition += HandleSpecialCondition;
}
public void HandleSpecialCondition(object sender, EventArgs e)
{
// Your handler here.
}
}
如果需要,您可以将EventArgs
更改为更有用的传递值。
答案 2 :(得分:0)
parent.aspx.cs
public void DisplayMsg(string message)
{
if (message == "" || message == null) message = "Default Message";
Response.Write(message);
}
要从用户控件调用父页面的功能,请使用以下命令: UserControl.ascx.cs
this.Page.GetType().InvokeMember("DisplayMsg", System.Reflection.BindingFlags.InvokeMethod, null, this.Page, new object[] { "My Message" });
这对我来说很好..
答案 3 :(得分:-2)
试试这个
MyAspxClassName aspxobj= new MyUserControlClassName();
aspxobj.YourMethod(param);