2011-11-18 29 views
1

我正在使用jQuery模板呈現服務器端控件和簡單html控件的混合頁面。這是一個ASP.NET webforms應用程序。在ASP.NET頁面上混合使用服務器控件和jQuery模板

當通過單擊保存按鈕進行服務器端請求時,如果服務器上的驗證失敗,則回發會導致在簡單html控件中輸入的值丟失(因爲它沒有視圖狀態)。

我能想到的唯一解決方案是在服務器請求發生之前將簡單html控件的狀態保存到隱藏的輸入控件中。如果驗證失敗,從這個隱藏的輸入重新水化jquery模板。看來我可以在jQuery中使用serialize函數,但我需要忽略此集合中的服務器控件(我認爲?)

除了必須序列化/反序列化信息之外,是否有更簡單的方法? UpdatePanels有幫助嗎?

回答

1

坦率地說,我不認爲UpdatePanels有幫助。它們會使你的代碼複雜化(儘管你的代碼中可能已經有很多if (Page.IsPostback == false)語句),並且請求可能非常慢。我個人覺得他們使用起來非常麻煩。

根據頁面的大小和複雜程度,可能需要檢入.asmx webservices。我已經廣泛地使用了它們(事實上,這是確切的情況),如果您已經使用jQuery,那麼很容易調用它們。

然而,作爲一個警告:我在這裏和文章閱讀的一些問題在其他地方,說的.asmx風格的Web服務會消失,最終,那你應該開始使用WCF替換該功能。

如果你發佈了一些標記和/或C#代碼(它根本不需要很複雜;只要足夠讓我們說同一種語言(可怕的笑話)),我就可以爲你提供示例jQuery AJAX調用和WebService示例。

+0

我熟悉asmx/wcf服務。您是否建議保存操作應該序列化非服務器控制信息並將其傳遞到服務器進行驗證,並且服務器控件自行進行回發和驗證? – Nick

+0

我會建議將服務器和非服務器控制數據都推送到asmx/wcf服務。在過去,我編寫純粹爲了運輸/驗證目的而存在的C#類,而且這個模型對我來說工作得非常好。 – jwiscarson

0

在我看來,如果您的某個網頁發回一條不會導致重定向的問題,您就會遇到此問題。基本上,你沒有辦法保留簡單的html控件在回發請求和響應中的狀態。基本上你需要一個與你的簡單html控件的viewstate相當的jQuery。我所說的基本上是使用JQuery序列化函數來保存狀態可能是最簡單的方法。 ViewState通過序列化控制狀態並將其置於隱藏字段中工作。所以你基本上會爲你創建的簡單html控件創建你自己的viewstate實現。

相關問題