从用户控件调用父页面功能

时间:2013-04-03 11:21:10

标签: asp.net

我有一个Default.aspx页面,我在其中使用了一个usercontrol。在usercontrol.cs的某些条件下,我必须调用Default.aspx.cs页面中存在的函数(即用户控件的父页面)。请帮忙告诉我完成这项任务的方法。

4 个答案:

答案 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()
    { 

    }
}

但请注意,这不是最佳做法,因为您要将UserControlPage进行硬链接。通常,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);