2013-08-30 47 views
1

我有一個包含Repeater的頁面,其中包含服務器控件元素,在UpdatePanel內,並且所有其他控件的行爲正常時,Drop Down控件導致完整每次回發。ASP.NET C#,在轉發器中導致完整回發的動態下拉

<asp:Repeater ID="rpt" runat="server"> 
    <ItemTemplate> 
     <asp:SomeWorkingControl ID="swc" runat="server" /> 
     <asp:DropDownList ID="ddl" runat="server" OnSelectedIndexChanged="ddl_SelectedIndexChanged" AutoPostBack="true"> 
      <asp:ListItem Text="0" Value="0" /> 
      <asp:ListItem Text="1" Value="1" /> 
     </asp:DropDownList> 
    </ItemTemplate> 
</asp:Repeater> 

這是非常有價值的代碼,DropDownList控件實際上是在UserControl中,但理論是相同的。

如果我將事件應用到SomeWorkingControl然後有一個Ajax回發和一切都很好。

但是,與DropDownList關聯的事件會導致完整的回發!我知道通常你會爲DropDown設置一個異步觸發器,但是由於它是在一箇中繼器中創建的(因此我不知道會有多少),所以我真的不知道它是如何工作的。

有沒有誰曾經歷過這種情況,並知道一個解決方法或許?

+0

你的UpdatePanel中是否有觸發器?你可以用更新面板更新完整的aspx代碼 – Damith

+0

不,現在UpdatePanel中沒有觸發器。通常我會這麼做,但是由於Repeater內部的DropDownList,我不知道該指向哪個觸發器。 我不能真正發佈完整的ASPX,它是一個ASPX中的UpdatePanel和用戶控件中的有問題的代碼的大頁面,在一箇中繼器中,然後是另一個用戶控件。 UpdatePanel是基本的,看起來像這樣。 的 <的ContentTemplate> ... ASCX - >轉發器 - > ASCX

+0

您可能希望簡化佈局 - 「Repeater」已經被設計爲重複每行的標記。如果您打算在其他地方使用該標記,則將該標記封裝在「UserControl」中僅有幫助。 –

回答

6

嘗試改變這一行:

<asp:DropDownList ID="ddl" runat="server" OnSelectedIndexChanged="ddl_SelectedIndexChanged" AutoPostBack="true"> 

爲:

<asp:DropDownList ID="ddl" runat="server" OnSelectedIndexChanged="ddl_SelectedIndexChanged" AutoPostBack="true" ClientIDMode="AutoID"> 

最近,我有同樣的問題,我發現了的ClientIDMode可以解決這個問題。

請看看這裏:asp.net ClientIDMode Changes

+0

非常好!這是在更新面板中完成的技巧和回發,它不會使用DropDownList中的ClientIDMode =「AutoID」更新整個頁面。 非常感謝! –

+0

我很高興能幫上忙。 – coutol

相關問題