2012-11-09 38 views
1

任何在.NET Web應用程序中使用jQuery的人都可能遇到問題,在回發期間(由於視圖狀態,安全性等原因),通過jQuery在客戶端上所做的更改不一定會持久存在於Web服務器上。如何在使用jQuery時解決ASP.NET Webforms限制?

我的場景: 我有一個GridView有兩個不同的ASP.NET下拉菜單。其中一個下拉列表在page_load期間填充,而另一個則保留爲空白。剩下的空白就像這樣填充:當用戶在第一個下拉列表中選擇一個項目時,它會觸發一個事件,該事件使用jQuery ajax從Web服務器檢索數據,然後將這些數據返回給客戶端並填充到第二個下拉列表。這一切都是基本的,簡單而平穩的啓動。我喜歡它。

但是,我不喜歡的事實是,當用戶在第二個下拉列表中選擇一個項目(在它已經被jQuery ajax調用填充之後)並單擊保存按鈕(這會導致回發),那麼下拉選擇在服務器端顯示爲空(這實際上意味着服務器不知道下拉列表中有項目或者用戶選擇了其中的項目)。很明顯,這與視圖狀態中的下拉列表是空的這一事實有關,我完全意識到爲什麼在這背後,但是讓我非常沮喪地嘗試將jQuery與.NET混合。

所以我的問題是這樣的:我如何去使用jQuery來填充ASP.NET下拉,並通過回發持續其中的項目?

感謝您的幫助!

+0

如果您所需要的只是選定的值,那麼無論ASP.NET管道是否能夠重新創建由客戶端動態填充的控件的子項,它都可以訪問表單中的變量Request.Form KVP集合。如果客戶端需要重新加載頁面,問題就來源於持久化。在這種情況下,Christophe的答案可以用來促進這一點。 – GunnerL3510

回答

1

我以前遇到過這個問題。作爲解決方法,我將HiddenField控件放置在第二個下拉列表旁邊,並使用與第二個下拉列表相同的值填充該隱藏字段。 在後面的代碼可以訪問HiddenField值,像這樣:

HiddenFieldID.Value 

發現一個隱藏字段沒有文本屬性,而值屬性。

+0

這是最簡單的解決方案。謝謝您的幫助。 – Jagd

3

簡單的回答:不要回發!

使用$.post到處理程序(.ashx)或任何其他頁面,並保持的東西有...

還是想回傳?沒有問題,因爲你已經有第二項id只是預處理第一和第二個下拉柱後處理。

但我會永遠不會回發...我只是簡單地使用$.ajax或簡單的形式$.post發佈我的數據讓我有兩個不同的頁面,一個處理佈局和其他處理數據...這是在ASP.NET MVC中很常見,但因爲WebForms的工作方式,您需要像這樣區分它。

這裏是我的answer for the entire process在其他問題。

+0

這可能是最好的解決方案,但它需要重寫,不幸的是我沒有那種時間。我實際上經常使用$ .ajax來保存jQuery對話框,但我從來沒有試圖將它連接到一個可以完成整個網頁的Save按鈕。如果我喜歡這種方法,我將不得不更多地惹惱它。 – Jagd

2

正如你所說,「服務器不知道下拉列表中有項目」。

我的建議:使用一個簡單的輸入字段而不是第二個下拉菜單,因爲你真正從服務器的角度做的是發佈一個文本字符串。您可以隱藏該字段,並將其與純客戶端下拉列表同步,該下拉列表將作爲用戶的界面。

有關記錄,這是一些選擇元素如何在SharePoint上工作。