1

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

4

4 回答 4

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 - 事件驱动的通信

于 2013-04-03T11:27:20.210 回答
0

父.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" });

这对我来说很好..

于 2014-02-12T09:37:48.030 回答
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为更有用的东西来传递值。

于 2013-04-03T12:22:40.157 回答
-2

尝试这个

 MyAspxClassName aspxobj= new MyUserControlClassName();
    aspxobj.YourMethod(param);
于 2013-04-03T11:34:35.707 回答