2008-11-04 110 views
10

我遇到了具有TextBox和RequiredFieldValidator的標準ASP.NET頁面的問題。重現步驟非常簡單:必填字段驗證程序未觸發

  1. 放置一個文本框在頁面上
  2. 在頁面上放置一個RequiredFieldValidator
  3. 點在文本框
  4. 運行該應用從RequiredFieldValidator的
  5. 標籤離開TextBox RequiredFieldValidator不顯示
  6. 輸入文本,然後刪除文本然後將THEN選項卡移開,RequiredFieldValidator確實顯示

的RequiredFieldValidator的工作在回發後兩種情況很好,但它似乎客戶端代碼不點火,直到東西輸入到文本框(然後刪除)。

有沒有人有沒有解決這個問題,而不是在自己的JavaScript黑客?

回答

4

是否有可能這種行爲是設計,以抑制驗證控件,直到用戶輸入的出現?

一般來說,驗證()只要單擊控制具有的CausesValidation設置爲true,像一個提交按鈕被調用。

在任何情況下,一個可憐的人工作,你可以從Load事件處理程序調用頁面的Validate()函數。這會讓事情變得更加清晰,讓快樂的用戶知道他們需要輸入什麼內容。

protected void Page_Load(object sender, EventArgs e) 
{ 
    Validate(); 
} 
+0

我不相信這是通過設計。用戶突出顯示了TextBox並將焦點從焦點移開。點擊提交按鈕後,他們會被告知不正確,但應立即通知他們。 – 2008-11-04 07:06:33

+0

調用Page.Validate()是一個選項,但我認爲這不太理想,因爲它意味着頁面會自動顯示爲「無效」給用戶。 – 2008-11-04 07:08:10

+0

在我看來,所有的驗證器都以這種方式工作。如果你認爲它是一個框架中的錯誤,也許你可能會考慮打開一個微軟連接錯誤? – 2008-11-04 07:09:59

2

您是否將EnableClientScript屬性/屬性設置爲true? 你有一個文本框的默認值?如果是的話,你需要將與InitialValue屬性設置爲默認值

+0

EnableClientScript爲true。沒有默認值,並且InitialValue絕對沒有。 我會對其他人創建一個空白頁感興趣,試試看看他們是否得到和我一樣的結果。 – 2008-11-04 06:44:14

0

表單可以包含多個驗證組。 AFAIK驗證只能通過回發來觸發,激活相應驗證器組的驗證器。只有在回傳後,驗證器纔會添加其客戶端Javascript驗證代碼。只是驗證是如何工作的

0

那,他們不火,除非有輸入驗證或有回傳。如果你想讓它發生,你必須做驗證。

我不知道確切的代碼,你需要但它會與處理的onblur和壓倒一切的評價函數做:

function blurred(sender) { 
    var validator = sender.Validators[0] 
    validator.evaluationfunction(validator); 
} 

和文本框:

<asp:TextBox runat="server" ID="txt" onBlur="blurred(this)"></asp:TextBox> 
3

您可能會在此創建可用性問題。如果您在模糊上驗證必填字段,則僅僅因爲他在選項卡中顯示字段,用戶將收到很多「必填字段」錯誤。

4

後續我以前的答案:

驗證發生在onchange事件,而不是的onblur。當焦點丟失並且控制值已經改變時,onchange會發生火災。

要在onblur事件觸發驗證,添加以下代碼在Page_Load():

ScriptManager.RegisterStartupScript(this, GetType(), "js" + myTextBox.ClientID, 
    "ValidatorHookupEvent(document.getElementById(\"" + myTextBox.ClientID + 
    "\"), \"onblur\", \"ValidatorOnChange(event);\");", true); 

作品在ASP.Net 2

0

我有同樣的問題。發現您需要爲您的腳本管理器添加一些框架腳本引用。確保你的腳本管理器至少有這些腳本引用和「腳本」標籤。

<asp:ScriptManager ID="ScriptManager1" runat="server" ValidateRequestMode="Enabled" > 
     <Scripts> 
     <%--Framework Scripts--%> 
     <%--<asp:ScriptReference Name="MsAjaxBundle" />--%> 
     <asp:ScriptReference Name="jquery" /> 
     <asp:ScriptReference Name="jquery.ui.combined" /> 
     <asp:ScriptReference Name="WebForms.js" Path="~/Scripts/WebForms/WebForms.js" /> 
     <asp:ScriptReference Name="WebUIValidation.js" Path="~/Scripts/WebForms/WebUIValidation.js" /> 
     <asp:ScriptReference Name="WebFormsBundle" /> 
     <%--Site Scripts--%> 

    </Scripts> 
    </asp:ScriptManager> 

你可以找到那些以及在當你創建一個web表單應用程序通過.NET中創建的默認主頁。