ASP.NET:在验证失败后禁用Postback

3

验证失败后,我遇到了控件(下拉列表或按钮)应该引起新的回发的问题。我会尽量清楚地解释...

我的页面的目的是将五个日期保存在数据库中。页面有以下控件:

  • 五个文本框,每个文本框都包含一个日期。
  • 一个重置按钮(CausesValidation=false),用于在5个文本框中恢复默认日期。
  • 一个下拉列表(AutoPostback=true,CausesValidation=false),包含预定义的模板,可将5个日期应用于5个文本框。
  • 一个用于将日期保存到数据库中的按钮。

这些文本框可以手动编辑。所以,当我单击保存按钮时,如果日期格式无效,则验证失败并中止保存。问题就在此之后。如果我单击重置按钮或选择下拉列表中的项目,则不会触发回发。如果我再试一次,那么它就能正常工作。是否有办法使第一次验证失败后第一次就能正常工作?我尝试在更改下拉列表中的选项时在客户端取消激活验证,但回发仍未发生。

以下是代码的相关部分:

<asp:DropDownList ID="cboScheduleTemplates" runat="server" AutoPostBack="true" CausesValidation="false" />
<asp:TextBox ID="txtDateDelivery1" runat="server" />
<asp:RegularExpressionValidator ID="revDateDelivery1" runat="server" Display="Dynamic" ValidationGroup="Schedule" ControlToValidate="txtDateDelivery1" Text="*" />
<asp:TextBox ID="txtDateYearbookQuantity" runat="server" />
<asp:RegularExpressionValidator ID="revDateYearbookQuantity" runat="server" Display="Dynamic" ValidationGroup="Schedule" ControlToValidate="txtDateYearbookQuantity" Text="*" />
<asp:TextBox ID="txtDateDelivery2" runat="server" />
<asp:RegularExpressionValidator ID="revDateDelivery2" runat="server" Display="Dynamic" ValidationGroup="Schedule" ControlToValidate="txtDateDelivery2" Text="*" />
<asp:TextBox ID="txtDatePersonalizations" runat="server" />
<asp:RegularExpressionValidator ID="revDatePersonalizations" runat="server" Display="Dynamic" ValidationGroup="Schedule" ControlToValidate="txtDatePersonalizations" Text="*" />
<asp:TextBox ID="txtDateDelivery3" runat="server" />
<asp:Button ID="btnSetDefaultDelivery3" runat="server" ValidationGroup="Schedule" CausesValidation="false" />
<asp:RegularExpressionValidator ID="revDateDelivery3" runat="server" Display="Dynamic" ValidationGroup="Schedule" ControlToValidate="txtDateDelivery3" Text="*" />
<asp:Button ID="btnSaveSchedule" runat="server" CssClass="btnAction" Text="Save" ValidationGroup="Schedule" />
<asp:ValidationSummary ID="validationSummarySchedule" runat="server" ValidationGroup="Schedule" DisplayMode="List" />

在下拉列表中选择一个项目,你是否选择了相同的项目? - Shoban
下拉列表中的第一项是“选择模板”。选择模板后,应进行postback操作。在服务器端代码中,在处理选择更改后,我再次将第一个项目设置为已选择。因此,在我描述的情况下,不会选择相同的项目。 - ConnorsFan
你能发布一些示例标记,以便我们可以看到设置情况吗? - James Johnson
1个回答

5

正如这篇文章所建议的,问题出在对Page_ClientValidate的调用上。因此我将客户端函数进行了包装,代码如下,问题得到了解决:

function DoPageClientValidate(validationGroupName) 
{
     var result = Page_ClientValidate(validationGroupName);
     Page_BlockSubmit = false;
     return result; 
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接