验证问题

时间:2011-07-27 18:55:43

标签: asp.net vb.net validation

所以我有一个ASP.NET / VB Web应用程序,我在其中使用RequiredFieldValidators和CustomValidators。但是,我在所有验证方面遇到了一些重大问题。当您单击“下一步”按钮转到表单的下一页而不填写必填字段时,将显示所有RequiredFieldValidators并显示错误消息,但过了一会儿它仍会转到下一页。有时在更改代码中不相关的部分之后,它会再次开始工作,并且会工作一段时间,直到我改变其他内容。 CustomValidators甚至更不一致,有时工作,有时会触发,但不会阻止用户移动到下一页,有时根本不工作,但只有在我更改代码时停止/开始工作似乎不应该影响它。有时一个工作,一个不工作。令我疯狂的是,这似乎是随机的。而且我似乎无法确定代码中的哪些更改实际上会对此产生影响。有没有人有任何想法?是否有任何可以同时影响页面上所有验证的内容?这是我的一些代码,如果有必要,我也可以发布一些代码。

必填字段验证器:

<asp:RequiredFieldValidator ID="rfvFirstName" ControlToValidate="txtFirstName" runat="server"SetFocusOnError="true" ErrorMessage="Required"></asp:RequiredFieldValidator>

自定义验证器:

<asp:CustomValidator ID="cvRequired" runat="server" ControlToValidate="txtCourseNum" Enabled="true" ErrorMessage=""></asp:CustomValidator>
<asp:CustomValidator ID="cvDuplicate" runat="server" ControlToValidate="txtCoursePrefix" Enabled="true" ErrorMessage=""></asp:CustomValidator>

下一步按钮:

<asp:Button ID="btnNextA" runat="server" Text="Next" OnClick="btnNext_Click" UseSubmitBehavior="true" CausesValidation="true" />

2 个答案:

答案 0 :(得分:4)

Sara,确保不应验证的按钮将CausesValidation设置为false。此外,如果您最终回发以进行验证,请确保在假设有效之前查看Page.IsValid属性。验证器将在回发事件之前触发。您的下一个按钮是否会回复 - 如果是,请检查该按钮。

我敢打赌,如果您是第一次加载页面并且没有为必填字段输入值,那么您将无法进入下一页。但是,如果您有所需值的值,您将看到验证器触发,但您将转到下一页。下一个按钮的代码应该检查Page.IsValid属性。

验证令人困惑的原因是默认情况下某些验证器将出现在客户端(例如,必需的字段验证器),而有些验证器将出现在服务器端(如服务器端方法订阅其事件的自定义验证器)。如果客户端验证器失败,您将永远不会进入服务器。此外,如果客户端验证器通过您的服务器端验证器将运行,但....这是棘手的部分,您的回发处理程序将在验证器触发后触发。因此,如果您在回发处理程序中重定向(假设回发是由按钮单击引起的),那么即使您的服务器端验证程序失败,您也将被重定向,因此您的验证程序似乎无法正常工作。它可能有效,但您可能没有检查过Page.IsValid属性。

同样重要的是要注意订单是:

  • 客户端验证,
  • 服务器端验证,
  • 然后你的回复活动

我不会在一堆圣经上发誓(因为我没有一堆圣经),但你认为不一致的行为很可能是你实际上没有以相同的顺序执行任务。如果您没有在必填字段中放置任何内容,那么您永远不应该回发。如果您在必填字段中放入某些内容并且其中一个服务器端验证程序失败,那么您将回发,但如果您不测试Page.IsValid,则会显示验证程序无法正常工作。    事件处理程序。

答案 1 :(得分:0)

首先,将验证组放在验证器和按钮上。如果这也不起作用,请将OnClientClick ='CheckValidate();'并声明将调用page_clientvalidate方法的函数以及参数.. validation group。 这肯定会奏效。如果这不起作用将调试器放在javascript方法中并调试相同的