我初始化了一个正则表达式验证控件来验证文本框控件。我希望用户能够输入美国货币值($ 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" />
答案 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)
应该发射就好了。执行以下操作:
CauseValidation="true"
,因为您不需要它,并确保未在Button
中设置此属性。ValidationSummary
并将其设置为显示弹出窗口。 ValidationSummary
控件使用存储在验证程序的ErrorMessage
属性中的值。if (Page.IsValid)
,以便在禁用javascript的情况下进行服务器端检查。除此之外,它应该按照您的预期运作。
答案 2 :(得分:0)
在您的Submit_Click(或诸如此类)中,您需要检查Page.IsValid。 ASP.NET不会自动假设您在页面上有验证器。您可能必须先调用Page.Validate()。