5

People のコレクションがバインドされた DataList があり、各 Person には Button があり、クリックすると非同期ポストバックを発生させる必要があるため、OnClick イベント ハンドラーは UpdatePanel に表示される詳細を変更できます [DataList は UpdatePanel の外部にあります]。

Button を設定して、DataList の OnItemDataBound イベント ハンドラで UpdatePanel を変更しようと 2 回試みました。1 つは AsyncPostBackTrigger を UpdatePanel に割り当て、もう 1 つは RegisterAsyncPostBackControl を ScriptManager に割り当てます。どちらも機能しますが、初回のみです。別のユーザーのボタン [または同じボタンを 2 回押す] が押されると、ページは完全にポスト バックされます。

UpdatePanel の UpdateMode が Conditional に設定され、ScriptManager の EnablePartialRenderingEnablePartialRendering が true に設定されています。

OnItemDataBound のコード:

Button btnShowNotes = e.Item.FindControl( "btnShowNotes" ) as Button;

// Trigger
AsyncPostBackTrigger trigger = new AsyncPostBackTrigger();
trigger.ControlID = btnShowNotes.UniqueID;
trigger.EventName = "Click";
upDetails.Triggers.Add( trigger ); // UpdatePanel

// The trigger or this is used, not both
ScriptManager1.RegisterAsyncPostBackControl( btnShowNotes );

最初の Async PostBack が発生すると、参照が失われたように見えますが、これは DataList を常に再バインドしなくても永続化できるのでしょうか? 私がこれを試みている方法で何かが欠けているに違いありません。

4

2 に答える 2

3

私は解決策を思いつきましたが、それが最善/最適なものかどうかはわかりません。Page_Load メソッドの PostBack ごとに、項目をループ処理して Aync PostBack をボタンに登録します。

if ( IsPostBack )
{
    foreach ( DataListItem item in gvAllUsers.Items )
    {
        btnShowNotes = item.FindControl( "btnShowNotes" ) as ImageButton;
        ScriptManager1.RegisterAsyncPostBackControl( btnShowNotes );
    }
}
于 2010-09-27T09:04:31.660 に答える
0

ToolkitScriptManager1.RegisterAsyncPostBackControl(ibtnShowPicker) コードの上に配置する必要があります page_load ibtnShowPicker は ID 名です

于 2013-05-09T10:57:33.720 に答える