簡體   English   中英

從另一個用戶控件中的控件更新用戶控件中的更新面板

[英]Updating an Update Panel in a usercontrol from a control in another user control

首先,對這個問題的長度道歉!

我有一個頁面上有幾個Web用戶控件,其中兩個有點相互依賴。 在一個理想的世界中,他們可能是一個控制,但由於各種原因,他們需要兩個。

我需要根據另一個控件中下拉列表的操作更新其中一個控件中的更新面板,如下所述。

為此,我們將調用控件JobControlCallControl JobControl包含一個下拉列表,它是AJAXControlToolkit的Cascading Dropdown列表的一部分。 當此下拉列表具有選定的索引更改時,我想更新CallControl中的控制面板。

CallControl公開了它的更新面板:

    public UpdatePanel UpdatePanel
    {
        get { return updCall; }
    }

JobControl有一個公共成員AssociatedCallControl

private ServiceCallControl associatedCallControl;

public ServiceCallControl AssociatedCallControl
{
    get { return associatedCallControl; }
    set { associatedCallControl = value; }
}

然后,這兩個在包含控件的頁面的OnLoad事件中關聯在一起。

這個SO問題: 更新面板錯誤:在UpdatePanel中找不到ID為“xxx”的控件導致我在JobControl的onload事件中嘗試這個:

if (associatedCallControl != null)
{
    AsyncPostBackTrigger trig = new AsyncPostBackTrigger();
    string s = ddCallGroup.ClientID;
    //ddCallGroup is the dropdown I want to trigger the update of the CallControl
    trig.ControlID = ddCallGroup.ClientID; //Also Tried ddCallGroup.ID
    trig.EventName = "CallGroupChanged";
    associatedCallControl.UpdatePanel.Triggers.Add(trig);
}

以下內容也添加到JobControl中

public void CallGroupChanged(object sender, EventArgs e)
{
     //Stuff to update the CallControl panel including calling update();
     associatedCallControl.RefreshMehods(int.Parse(ddCallGroup.SelectedValue));        
}

在所有這些之后懸停我仍然得到A control with ID 'TabContainer1_tabJob_ctrlJob_ddCallGroup' could not be found for the trigger in UpdatePanel 'updCall'.

我嘗試不可能嗎? 我是以錯誤的方式解決這個問題還是我錯過了什么?

如果可以的話,試試這個, - 在CallControl中創建和調用EventHandler委托; - 將其指向當前頁面中的方法; - 在這種方法中,簡單地調用

JobCtrl.UpdatePanel.Update();

希望這有幫助!

編輯:代碼示例

CallControl.ascx.cs:

public partial class JobControl
{
    public void CallGroupChanged(object sender, EventArgs e)
    {
        // do your work

        if (this.MyEventDelegate != null) // check if the event is not null
            this.MyEventDelegate(this, null); // invoke it
    }

    public event EventHandler MyEventDelegate;
}

Page.aspx:

<controls:CallControl runat="server" ID="CallControl1" OnMyEventDelegate="RefreshMethod" />

Page.aspx.cs:

public partial class Page_aspx : System.Web.UI.Page
{
    protected void RefreshMethod(object sender, EventArgs e)
    {
        this.CallControl1.UpdatePanel.Update();
    }
}

希望這很清楚..!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM