1

以下.NET 3.5的代碼,放置在一個aspx文件,當頁面加載(用於啓用誰JavaScript的用戶)將觸發JavaScript錯誤:驗證在<noscript>導致JavaScript錯誤

<noscript> 
    <asp:TextBox ID="txt" runat="server"></asp:TextBox> 
    <asp:RequiredFieldValidator ID="txt_RequiredFieldValidator" runat="server" 
     ControlToValidate="txt"></asp:RequiredFieldValidator> 
    <asp:Button ID="btn" runat="server" Text="Button" /> 
</noscript> 

錯誤是因爲由ASP.NET驗證控件生成的JavaScript不包含空下方的第二個代碼行前檢查:

var ctl00_body_txt_RequiredFieldValidator = 
    document.all ? 
    document.all["ctl00_body_txt_RequiredFieldValidator"] : 
    document.getElementById("ctl00_body_txt_RequiredFieldValidator"); 

ctl00_body_txt_RequiredFieldValidator.controltovalidate = "ctl00_body_txt"; 

任何人都可以提出一個解決方法呢?


腳註:爲什麼要這樣做?對於我的非JavaScript用戶,我用一些不同的UI組件替換了一些AJAX功能,這些組件需要驗證。

回答

2

您應該添加下列到的RequiredFieldValidator:

enableclientscript="false" 

看到,因爲你是在<無腳本>標籤使用這些,還有在供應控制的客戶端vaildation沒有一點 - 他們只打算顯示JS是否關閉。

這將強制驗證在服務器端爲您自動發生。

只要確保在處理響應之前調用「Page.IsValid」。

查看BaseValidator.EnableClientScript瞭解更多詳情。

0

javascript正在尋找包含在noscript中的元素? AFAIK沒有乾淨的方式來檢測服務器端的腳本支持。

我認爲你需要建立一個重定向(如果你不介意驗證失敗,我已經看到這在一個標題無腳本中的元刷新完成),以推動無腳本用戶「在頁面上「或做一些手術來放鬆驗證/控制綁定,這可能需要一定量的車輪重新發明。這是asp.net控制器和視圖之間緊密耦合真正受到懲罰的領域之一。