正则表达式验证器不显示错误消息

时间:2010-03-17 22:17:37

标签: asp.net .net validation

我初始化了一个正则表达式验证控件来验证文本框控件。我希望用户能够输入美国货币值($ 12,115.85或1500.22等)。我在regexlib网站上发现了一个正则表达式。除了一件至关重要的事情外,验证控件似乎正在起作用。如果输入了无效数据,则验证文本显示(文本框旁边的红色“*”),但页面仍将提交,并且不会弹出错误消息...我认为错误消息应该显示如果验证控件检测到无效数据,则页面将不会提交。这不是ASP .NET的自动化吗?我已经广泛搜索了如何创建验证控件,但没有找到与我已经在做的不同的东西。谁能告诉我这里我做错了什么?

<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" />

3 个答案:

答案 0 :(得分:4)

是的,在客户端,验证应该是自动的。您需要检查一些事项。

页面上是否有其他javascript出错并导致验证脚本失败?

您使用的是验证组吗?如果是这样,请确保提交按钮包含在此验证组中。

您的提交按钮是否将属性“CausesValidation”设置为false?

您确定验证表达式是否正确?尝试下载Expresso之类的工具,以确保您的表达式符合预期的不同输入。

要检查的另一点,正则表达式验证器不会触发空字符串。您是否使用空输入进行测试并期望表达式失败?如果是这样,那么请尝试提供额外的requiredfieldvalidator来捕获这个额外的失败条件。

最后,您可以自己调用客户端页面验证来检查发生了什么。尝试使用OnClientClick属性在页面上放置一个临时按钮,如:

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

这将触发客户端的验证检查,并提供有关验证结果的警报。

答案 1 :(得分:1)

应该发射就好了。执行以下操作:

  1. 删除TextBox上的CauseValidation="true",因为您不需要它,并确保未在Button中设置此属性。
  2. 确认您的按钮未附加到验证组,如果是,则验证者必须设置为同一组。
  3. 如果您想要弹出窗口,则需要添加ValidationSummary并将其设置为显示弹出窗口。 ValidationSummary控件使用存储在验证程序的ErrorMessage属性中的值。
  4. 还要确保在按钮处理程序中执行if (Page.IsValid),以便在禁用javascript的情况下进行服务器端检查。
  5. 除此之外,它应该按照您的预期运作。

答案 2 :(得分:0)

在您的Submit_Click(或诸如此类)中,您需要检查Page.IsValid。 ASP.NET不会自动假设您在页面上有验证器。您可能必须先调用Page.Validate()。