2009-02-02 124 views
12

所以我有一個UserControl,它上面有一些級聯的DropDownList。從列表1中選擇將啓用列表2,列表2將啓用列表3.一旦在三個列表中進行了選擇,就可以進入下一頁。在UpdatePanel之外更新控件

DropDownList s都在UpdatePanel之內。但「下一頁」按鈕不在UpdatePanel之外。該按鈕應該被禁用,直到所有三個列表都有選擇,然後應該再次啓用。但由於該按鈕位於UpdatePanel之外,所以在進行選擇時它不會更新。 (編輯:「下一頁」按鈕是還包含UserControl一個頁面上。)

我知道要解決這個辦法:

var scriptManager = ScriptManager.GetCurrent(this.Page); 
scriptManager.RegisterPostBackControl(dropDownList1); 
scriptManager.RegisterPostBackControl(dropDownList2); 
scriptManager.RegisterPostBackControl(dropDownList3); 

這確保回發時,任何下拉列表更改,以便按鈕可以更新。但是,如果我這樣做,我可能會簡化擺脫UpdatePanel首先。

有沒有另外一種方法,通過一些聰明的JavaScript或其他東西,我可以更新一個UpdatePanel以外的控件,而不必放棄Ajax?

回答

6

您是否可以不在「下一頁」周圍添加更新面板,然後將觸發器添加到下拉列表更新面板以觸發下一個頁面更新面板?

剛扔出去的想法,實際上並沒有嘗試過吧:)

+0

這是最接近我必須做的。我只需在主頁面上調用一個方法(強制使用this.Page)來正確設置Next按鈕,而不是觸發器。我還必須在Next按鈕上使用RegisterPostBackControl才能使其在UpdatePanel中工作。 – 2009-02-03 02:32:05

1

這將理想在JavaScript中進行,並在click事件處理程序的服務器端驗證檢查。

快速jQuery的例子:

//assuming the dropdowns all have the css class "cascade" 
$('select.cascade').change(function() { 
    If ($('option:selected',this).length == 3) { 
    $('input[id$=btnNext]').removeAttr('disabled'); 
    } 
}); 
12

周圍放置一個按鈕一個UpdatePanel,因此,它觸發一個異步回發創建爲每個下拉菜單的觸發。例如:

<Triggers> 
    <asp:AsyncPostBackTrigger ControlID="dropDownList1" /> 
    <asp:AsyncPostBackTrigger ControlID="dropDownList2" /> 
    <asp:AsyncPostBackTrigger ControlID="dropDownList3" /> 
</Triggers> 
2

你可以將它放到update_panel2,說update_panel2.update() upddate更新面板之外的控制。

請注意UpdatePanel的UpdateMode必須設置爲conditional才能正常工作。

+0

相信與否,這實際上對我有效。多謝,夥計。 – 2014-07-21 02:17:04

相關問題