0

我正在构建 ac#/.net 网站。

该站点使用母版页和更新面板。

我有一种情况,我在页面中有一个用户控件,需要更新母版页中的用户控件,反之亦然。

我知道如何在用户控件和页面或用户控件和母版页之间构建一个委托,但我不确定有几件事,因为我对 .net 的了解不是很好。

1)如何在usercontrol->page->master page之间构造一个委托(2级) 2)同样的向后usercontrol->master page->page

我不确定是否可以共享 1) 和 2) 的任何组件。例如,跨越 2 个级别并双向工作的单个委托事件。

我会很感激任何建议/例子。

提前致谢。

4

1 回答 1

2

我不能从你的问题中确定,但也许你需要知道你可以在命名空间级别声明委托?

namespace MyNamespace
{
   public delegate void MyDelegate(object sender, EventArgs e);

   public class MyClass
   {
      public event MyDelegate OnSomethingHappened;
   }
}

编辑 我想我理解得更好...看看这是否是您要查找的内容:这是来自 Site.Master 页面和 WebUserControl 的“.cs”文件的代码...委托是全局声明的在命名空间中,在母版页中,用户控件声明该委托类型的事件:

// MASTER PAGE
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace WebApplication4
{
    public delegate void MyDelegate(object sender, EventArgs e);

    public partial class SiteMaster : System.Web.UI.MasterPage
    {
        // Here I am declaring the instance of the control...I have put it here to illustrate
        // but normally you have dropped it onto your form in the designer...
        protected WebUserControl1 ctrl1;

        protected void Page_Load(object sender, EventArgs e)
        {
            // instantiate user control...this is done automatically in the designer.cs page 
            // if you created it in the visual designer...
            this.ctrl1 = new WebUserControl1();

            // start listening for the event...
            this.ctrl1.OnSomethingHappened += new MyDelegate(ctrl1_OnSomethingHappened);
        }

        void ctrl1_OnSomethingHappened(object sender, EventArgs e)
        {
            // here you react to the event being fired...
            // perhaps you have "sent" yourself something as an object in the 'sender' parameter
            // or perhaps you have declared a delegate that uses your own custom EventArgs...
        }
    }
}

//WEB USER CONTROL
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace WebApplication4
{
    public partial class WebUserControl1 : System.Web.UI.UserControl
    {
        public event MyDelegate OnSomethingHappened;

        protected void Page_Load(object sender, EventArgs e)
        {

        }

        private void MyMethod()
        {
            // do stuff...then fire event for some reason...
            // Incidentally, ALWAYS do the != null check on the event before
            // attempting to launch it...if nothing has subscribed to listen for the event
            // then attempting to reference it will cause a null reference exception.
            if (this.OnSomethingHappened != null) { this.OnSomethingHappened(this, EventArgs.Empty); }
        }
    }
}
于 2012-09-22T19:17:51.200 回答