两个UserControl,一个页面,需要相互通知更新

时间:2010-05-14 17:59:35

标签: asp.net user-controls

我有一个在同一页面上使用过两次的用户控件,每个都有能力更新(下拉列表获取一个新项目),我不知道什么是处理这个问题的最佳方法。

一个问题 - 这是一个较旧的系统(~4 +年,数据集,.net2),它非常脆弱。我确实设法让它在3.5上运行没有任何问题,但是当我更改/添加/修改控件时,我已经有一些javascript验证(每页约300行)的试运行。父节点。

2 个答案:

答案 0 :(得分:2)

向您的用户控件添加一个事件。

    public event EventHandler MyEvent;

    protected void OnMyEvent(EventArgs e)
    {
        if(MyEvent != null)
        {
            MyEvent(this, e);
        }
    }

    protected void AddOptionAdded(object sender, EventArgs e)
    {
        OnMyEvent(EventArgs.Empty);
    }

然后在您的页面中,您可以订阅两个控件事件。

    protected  void Page_Load(object sender, EventArgs e)
    {
        WebUserControl1.MyEvent += OnMyEventHander;
        WebUserControl2.MyEvent += OnMyEventHander;
    }

    protected void OnMyEventHandler(object sender, EventArgs e)
    {
        // Notify the other controls that something changed.
    }

然后在页面的事件处理程序中,您可以执行更新其他控件所需的任何操作。调用方法等

您还可以创建自己的委托和EventArgs类,以传递可能需要的其他自定义数据。

答案 1 :(得分:0)

甚至不需要大部分,我忘了提到它是vb,所以我把它放在用户控件中......

Public Event UpdateListings As EventHandler

Public Function SomethingToDo

    'doing some cool stuff ...not really

    RaiseEvent UpdateListings(Me, EventArgs.Empty)

    Return result
End Function

然后在父页面上的代码

Protected Sub UpdateStuff(ByVal sender As Object, ByVal e As EventArgs) Handles userControl1.UpdateListings, userControl2.UpdateListings
    userControl1.BindStuff()
    userControl2.BindStuff()
End Sub