2011-07-27 187 views
1

所以我有一个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" /> 
+0

您的自定义验证器是否实际执行任何操作?您尚未设置ValidateFunction(服务器或客户端)。 – Rezler

+0

是的,它在后面的代码中连接起来(ServerValidate事件) – Sara

回答

4

萨拉,确保不应该被确认具有的CausesValidation按钮设置为false。另外,如果您最终发布了验证信息,请确保在假设事物有效之前查看Page.IsValid属性。验证器将在回发事件之前触发。你的下一个按钮是否回传 - 如果是,请检查。

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

验证令人困惑的原因是,一些验证器默认情况下会发生客户端(例如必需的字段验证器),而一些会发生在服务器端(比如自定义验证器,其服务器端方法订阅了它们的事件)。如果客户端验证程序失败,则永远不会将其发送到服务器。另外,如果客户端验证器通过你的服务器端验证器将运行,但是....这是棘手的部分,你的回发处理器将在验证器激发后触发。因此,如果您在回发处理程序中重定向(假设回发是由点击按钮引起的),那么即使您的服务器端验证程序失败,您也将被重定向,因此您的验证程序看起来不起作用。它可能工作,但你可能没有检查Page.IsValid属性。

同样需要注意的是,顺序是非常重要的:

  • 客户端验证,
  • 服务器端验证,
  • 那么你的回发事件

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

+0

就像ek_ny提到的那样,确保在转到下一页之前检查“if(Page.IsValid)”。 – jdmonty

+0

@jdmonty - 谢谢。 –

+0

谢谢,检查Page.IsValid是否为所需的字段验证器和其中一个自定义验证器工作。仍然有一个自定义验证器的问题,但我认为这是一个无关的问题,如果我无法解决它,我可能会发布一个单独的问题。谢谢你的帮助! – Sara

0

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

+0

是的。也使用萤火虫,并检查是否有任何js错误发生。 – Rezler