0

まず、この質問の長さについてお詫びします!

私はいくつかのWebユーザーコントロールを備えたページを持っていますが、そのうちの2つはある程度相互依存しています。理想的な世界では、それらは1つのコントロールである可能性がありますが、さまざまな理由から、2つである必要があります。

以下に説明するように、別のコントロールのドロップダウンリストのアクションに基づいて、コントロールの1つで更新パネルを更新する必要があります。

この目的のために、コントロールJobControlCallControlを呼び出します。JobControlには、AJAXControlToolkitのカスケードドロップダウンリストの一部であるドロップダウンリストが含まれています。このドロップダウンでインデックスの変更が選択されたら、CallControlのコントロールパネルを更新します。

CallControlは、更新パネルを次のように公開します。

    public UpdatePanel UpdatePanel
    {
        get { return updCall; }
    }

JobControlにはパブリックメンバーがいますAssociatedCallControl

private ServiceCallControl associatedCallControl;

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

次に、コントロールを含むページのOnLoadイベントで2つが関連付けられます。

このSO質問:更新パネルエラー:ID「xxx」のコントロールがUpdatePanelで見つかりませんでした。これにより、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'.

私は不可能を試みていますか?私はこれを間違った方法で行っているのですか、それとも何かを逃しただけですか?

4

1 に答える 1

2

可能であれば、これを試してください。-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();
    }
}

これが明確であることを願っています..!

于 2012-10-16T07:10:57.530 に答える