Asp.net

UpdatePanel 中的 ASP.NET 驗證器

  • January 12, 2016

由於執行時限制,我使用的是舊版本的 ASP.NET AJAX,在更新面板中放置 ASP.NET 驗證器不起作用。是否有使這些工作的技巧,或者我是否需要使用 AJAX 工具包附帶的 ValidatorCallOut 控制項?

我懷疑您正在執行 .NET 2.0 的原始版本 (RTM)。

直到 2007 年初驗證器控制項與 UpdatePanel 不兼容。.NET Framework 的 SP1 解決了這個問題。

問題的根源在於 UpdatePanel 可以檢測頁面中的標記更改,但它無法正確跟踪腳本。驗證器嚴重依賴腳本。在部分回發期間,腳本要麼被吹走,要麼沒有更新,要麼沒有按預期執行。

在早期的測試版中,MS 讓 UpdatePanel 嘗試猜測哪些腳本需要重新渲染或執行。效果不太好,他們不得不把它拿出來。

為了解決眼前的問題,Microsoft 在一個名為 Validators.DLL 的新 DLL 中發布了驗證器類的修補版本,並提供了有關如何告訴 ASP.NET 使用這些類而不是真實類的說明。如果您用 Google 搜尋該 DLL 名稱,您應該會找到更多資訊。另請參閱此部落格文章

這是一個權宜之計*,如果可能的話,你不應該*使用它 。

不久之後,在 .NET 2.0 SP1 中,問題的真正解決方案出現了。Microsoft 在 SP1 中引入了一種新機制來註冊腳本,並更改了真正的驗證器類以使用該機製而不是舊機制。

讓我給你一些關於變化的細節:

傳統上,您應該通過 Page 方法註冊腳本,例如 Page.RegisterStartupScript() 和 Page.RegisterClientScriptBlock()。問題是這些方法不是為可擴展性而設計的,UpdatePanel 無法監控這些呼叫。

在 SP1 中,頁面上有一個名為 Page.ClientScripts 的新屬性對象。該對象具有註冊與原始腳本等效(並且在某些方面更好)的腳本的方法。此外,UpdatePanel 可以監視這些呼叫,以便在適當的時候重新呈現或呼叫方法。舊的 RegisterStartupScript() 等方法已被棄用。它們仍然有效,但不在 UpdatePanel 中。

沒有理由(除了政治,我想)不將您的安裝更新到 .NET 2.0 SP1。Service Pack 包含重要的修復程序。

祝你好運。

引用自:https://stackoverflow.com/questions/32814