2010-03-17 145 views
1

我有一個正則表達式驗證控件初始化來驗證文本框控件。我希望用戶能夠輸入美國貨幣值($ 12,115.85或1500.22等)。我找到了regexlib網站的一個正則表達式,可以做到這一點。驗證控制似乎正在工作,除了一個關鍵的事情。如果輸入無效數據,驗證文本顯示(文本框旁邊的紅色「*」),但頁面仍然會提交,並且錯誤消息不會彈出...我認爲錯誤消息應該顯示如果驗證控件檢測到無效數據,頁面將不會提交。這是不是與ASP .NET自動?我已經廣泛地搜索瞭如何創建驗證控件,但沒有發現與我已經在做的事情不同的東西。任何人都可以告訴我我在這裏做錯了什麼?RegularExpression Validator不顯示錯誤消息

<asp:TextBox ID="txtActualCost" runat="server" Width="120px" CausesValidation="true" /> 
<asp:RegularExpressionValidator ID="regExValActualCost" 
    ControlToValidate="txtActualCost" 
    Text="*" 
    ValidationExpression="^\$?(\d{1,3}(\,\d{3})*|(\d+))(\.\d{2})?$" 
    ErrorMessage="Please enter a valid currency value for 'Actual Cost'" 
    Display="Dynamic" 
    EnableClientScript="true" 
    runat="server" /> 

回答

0

在您的Submit_Click(或whatnot)中,您需要檢查Page.IsValid。 ASP.NET不會自動假定您在頁面上有驗證器。您可能必須先調用Page.Validate()。

+0

謝謝。我爲Page.IsValid添加了一個檢查,並按照我的需要運行 – 2010-03-17 23:12:21

4

是的,在客戶端驗證應該是自動的。有幾件事你會想要檢查。

頁面上是否存在其他一些JavaScript錯誤並導致驗證腳本失敗?

您是否使用驗證組?如果是這樣,請確保提交按鈕包含在此驗證組中。

您的提交按鈕是否將「CausesValidation」屬性設置爲false?

確定您的驗證表達式正確嗎?嘗試下載一個工具,例如Expresso,以確保您的表達能夠像您期望的那樣使用不同的輸入。

另一點檢查,正則表達式驗證器不會觸發空字符串。你是否用空輸入測試並期望表達失敗?如果是這樣,那麼請嘗試提供一個額外的requiredfieldvalidator來捕獲這種額外的失敗情況。

最後,您可以自己調用客戶端頁面驗證來檢查發生了什麼。試着將臨時按鈕的頁面上像的OnClientClick屬性:

<input type="button" value="Fire Validation" name="foo" onClick="Page_ClientValidate();alert('Valid: '+Page_IsValid);return false;" /> 

這將觸發驗證客戶端上的檢查和提供一個警報,驗證的結果。

+0

謝謝。這裏有很多好的建議供我研究:-) – 2010-03-17 23:13:44

+0

@RudiRamey,如果答案是正確的,請將其標記爲 – 2013-02-27 09:15:50

1

它應該開火就好了。執行以下操作:

  1. 你的文本框卸下CauseValidation="true"因爲你不需要它,並確保這個屬性是不是在你的Button設置。
  2. 驗證您的按鈕沒有附加到驗證組,否則驗證者必須設置爲同一組。
  3. 如果你想彈出,你需要添加一個ValidationSummary並將其設置爲顯示一個彈出窗口。 ValidationSummary控件使用存儲在驗證程序的ErrorMessage屬性中的值。
  4. 此外,請確保在您的按鈕處理程序中執行if (Page.IsValid),以便服務器端檢查以及禁用javascript時禁用。

其他那些事情,它應該按照你的預期工作。

+0

謝謝你看起來像我需要添加驗證總結! – 2010-03-17 23:11:09