2008-08-28 101 views
12

由於運行時限制,我正在使用較早版本的ASP.NET AJAX,因此在更新面板中放置ASP.NET驗證器不起作用。是否有一個技巧可以使這些工作成功?還是我需要使用AJAX工具包附帶的ValidatorCallOut控件?UpdatePanel中的ASP.NET驗證器

回答

21

我懷疑你正在運行的.NET 2.0的原始發佈(RTM)。

直到2007年初,驗證器控件與UpdatePanels不兼容。這是用.NET Framework的SP1解決的。

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

在早期的貝塔斯,MS有UpdatePanel嘗試猜想什麼腳本需要重新呈現或運行。它工作不太好,他們不得不把它拿出來。

爲了解決當前的問題,Microsoft在一個名爲Validators.DLL的新DLL中發佈了校驗器類的修補版本,並給出瞭如何告訴ASP.NET使用這些類而不是真實類的說明。如果你是Google的那個DLL名字,你應該找到更多的信息。另見This blog post

這是一個停止不前的措施,你應該 不使用它 如果可能的話避免它

問題的真正解決方案是在.NET 2.0 SP1之後不久。微軟推出了一種在SP1中註冊腳本的新機制,並將真正的驗證器類改爲使用該機制而不是舊版本。

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

傳統上,你應該通過頁面的方法,如Page.RegisterStartupScript()和Page.RegisterClientScriptBlock()註冊腳本。問題是這些方法不是爲擴展性設計的,UpdatePanel無法監視這些調用。

在SP1中,頁面上有一個名爲Page.ClientScripts的新屬性對象。這個對象有一些方法來註冊與原來的腳本是等價的(在某些方面更好)。此外,UpdatePanel可以監視這些調用,以便它在適當的時候重新渲染或調用方法。較舊的RegisterStartupScript()等方法已被棄用。他們仍然工作,但不在UpdatePanel中。

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

祝你好運。

+0

謝謝!我的一臺服務器顯示了這種行爲,實際上,它缺少sp1。 – edosoft 2008-11-02 19:40:30

2

@jmein

其實問題是,裏面放置一個UpdatePanel時(UpdatePanel的刷新使用.innerHTML,這增加了腳本節點爲文本節點,沒有腳本節點驗證客戶端腳本的不工作,所以瀏覽器不會運行它們)。

此修復程序是由微軟發佈的修補此問題的修補程序。我在Google的幫助下找到了它。

http://blogs.msdn.com/mattgi/archive/2007/01/23/asp-net-ajax-validators.aspx

3

@Jonathan Holland:使用Validators.dll有什麼問題?

由於它們會替換原始類,因此您正在悄悄繞過微軟未來可能發佈(或可能已經發布)的任何錯誤和安全修復程序,增強功能等。除非仔細看看web.config,否則您可能永遠不會注意到您正在跳過修補程序。

當然,你必須評估每種情況。如果你絕對堅持使用.NET 2.0 RTM,那麼Validators.dll總比沒有好。

-1

如果什麼都原因而無法使用ASP.NET驗證控件的udpated版本其實很容易給自己驗證驗證組,所有你需要做的就是調用

Page_ClientValidate("validationGroupName"); 

然後您可以使用PageRequestManager根據需要執行驗證。

明確使用更新的驗證控件是要走的路,但我很偏向於JavaScript;)