2010-09-01 185 views
2

之後我創建利用jQuery UI tabs網站。只要用戶在標籤之間翻轉,他們剛剛離開的標籤就會被髮回服務器以保存狀態。維護視圖狀態POST

一個特別的標籤是位在複雜的,如果我選擇一個特定的數據選項,其他選項需要禁用。但是,由於POST,當我返回到選項卡時,這些選項可以在視圖中重新啓用。我發現解決此問題的當前解決方案是檢查是否選擇了特定的選項,並適當地禁用其他選項(這發生在用戶翻轉回選項卡時發生)。但是,這似乎是太多的工作。我想知道是否有任何方法讓disabled屬性甚至通過POST保留在各種選項上。 (如果答案是「否」,我會接受的,但我想看看是否有另一種替代方法來確保用戶的視圖是正確的。)

編輯:我想添加一些代碼展示我在用戶切換標籤時所做的文章。 (特別是基於響應。)

$.post($(form).attr("action"), $(form).serialize(), function (data, success) { 
    if (success) { 
     // Inject the resulting form back into the parent of the page. 
     var parent = $(form).parent(); 
     parent.removeData($(form)); 
     parent.html(data); 

     processTabAfterLoad(tab_index); 
    } 
}); 

的processTabAfterLoad功能做了所有的選擇和選項卡的狀態設置回到它以前是。

回答

1

如果我是你,我會採取不同的方法。看起來您的目標是在導航時回覆服務器以保留用戶在應用程序中的位置,因此當他們返回時,您可以恢復此狀態。而不是通過POST重新加載整個頁面,你可以做的是做一個「AJAX」的帖子來告訴服務器存儲用戶的UI位置,但是做所有的UI啓用邏輯客戶端。這樣,不僅UI界面看起來更平滑,而且還可以減少服務器負載並使應用程序響應更快。

當用戶確實是你需要查找上次已知位置的UI頁面的初始讓它只能將。如果該用戶存儲了某些內容,則可以添加邏輯以在頁面加載時設置用戶界面的初始狀態。

更新:

事實上你正在做一個AJAX的職位,但你顯然也將來自後HTML響應到您的UI。這是一個有點不尋常的模式(除了ASP.NET更新面板)。通常,你要麼POST數據和預期的響應沒有內容或你會收到數據從中你會應用到用戶界面,而不是接受UI的片段後回來。

如果您致力於您當前處理表單提交的方式,您可以查看jQuery live函數,該函數可以將更改應用於元素以及符合條件的新插入元素。

+0

@Jacob - 我以爲我已經在做一個AJAX風格的貼子。我用用戶切換標籤頁時執行POST的代碼更新了我的問題。也許這將有助於澄清事情。謝謝。 – JasCav 2010-09-01 18:13:18

+0

@Jacob - 我包含HTML響應的原因是因爲我們有服務器端驗證規則,需要將其放回表單中,以便用戶可以看到它們(通過數據註釋)。我不知道如果我在發佈各個選項卡時沒有這樣做會發生什麼。 – JasCav 2010-09-01 20:01:51

+0

然後,使用'.live(...)'應該可以達到你的目的。 – Jacob 2010-09-01 20:13:56

0

標籤通常是導航技術。 Imho,當一個GET(即一個普通的鏈接)會做時,它是一種不好的做法,可以回傳和重定向。 GET將視圖狀態重置回已知點,是一個小的有效載荷,不需要在重定向之前丟棄的頁面生命週期等。

我也可能完全錯誤 - 我正在製作一些猜測,因爲我看不到任何代碼。