2010-11-30 15 views
8

私は非常に有名な問題のように思えます。私のupdatepanelは非同期ポストバックの代わりに完全なポストバックを起動します。UpdatePanelはasyncpostbackの代わりに完全なポストバックを返します

HTML::

通常のソリューションは...

を使用すると、動的に私が行っているが、私はまだ代わりに私の非同期ポストバックのフルポストバックを取得IDを追加、すべてのコントロールを与えることです。ここのコードです

<asp:UpdatePanel ID="ItemsUpdatePanel" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="False"> 
    <Triggers> 
    </Triggers>  
    <ContentTemplate> 
    <asp:ListView ID="PlayerItems" runat="server" GroupItemCount="5" 
            onitemdatabound="PlayerItems_ItemDataBound"> 
    <LayoutTemplate> 

    ... Listview stuff ... 

    </asp:ListView> 

    </ContentTemplate> 
</asp:UpdatePanel> 

興味深い部分は、以下のようなものであるの背後にあるC#コード(法PlayerItems_ItemDataBound)、次のとおりです。

  ImageButton imgBtn = new ImageButton(); 
      imgBtn.ID = "itemBtn"; 
      imgBtn.Width = Unit.Pixel(30); 
      imgBtn.ImageUrl = "~/Images/Game/Items/" + myItem.ItemImageUrl; 

      ContextMenu menu = new ContextMenu(); 
      menu.BoundControls.Add(imgBtn); 
      menu.ItemCommand += new CommandEventHandler(menu_ItemCommand); 

      menu.AutoHide = true; 
      menu.RolloverColor = Color.Gray; 
      menu.ID = "MenuMenu"; 

      Panel panel = (Panel)(e.Item.FindControl("ItemPanel")); 
      panel.Controls.Add(imgBtn); 
      panel.Controls.Add(menu); 

      AsyncPostBackTrigger trig = new AsyncPostBackTrigger(); 
      trig.ControlID = menu.UniqueID; 
      trig.EventName = "ItemCommand"; 
      ItemsUpdatePanel.Triggers.Add(trig); 

だから、私は実際にAsyncPostBackTrを追加しますItemCommandイベントを登録する必要があります。このコンテキストメニューで項目をクリックすると何が起こるのでしょうか、完全なポストバックが起こっています。

私はChildrenAsTriggersプロパティを使用せずにプレイしようとしています。また、AsyncPostBackTriggerコードを上下に移動しています。

ありがとうございます! ラース

答えて

8

AsyncPostBackTriggerドキュメントから:

はプログラム がサポートされていない AsyncPostBackTriggerコントロールを追加します。プログラムで ポストバックコントロールを登録するには、 RegisterAsyncPostBackControlメソッド ScriptManagerコントロールを使用します。次に、制御がポストバックするときに UpdatePanel コントロールのUpdateメソッドを呼び出します。

+0

Urh ..私が望んでいたものではありません。 ありがとうございました!私は本当に感謝しています! :-) –

+0

素晴らしい情報! =) –

+0

大変ありがとうございました! UpdatePanel1.Update(); – GPMorgan

29

UpdatePanelのPanel内でListBox内にCheckBoxListを設定すると、同じ経験ができました。 CheckBoxListに次のコードを追加して解決しました。

ClientIDMode="AutoID" 
+5

これは機能します!どうもありがとうございます。 MSは、 "AutoID"から "Predictable"への.net 4.0でのClientIDの生成方法を変更しました。ScriptManagerまたはUpdatePanelは正しく使用されていないようです。なぜそれがどこにあるのか、あるいはそれが設計通りに放置されていたのかについての文書を見つけることはできません。 – MikeTeeVee

+2

大変申し訳ございません!ありがとう!! – billy

+3

エピック回答、とても簡単です。ありがとうございました! –

関連する問題