【问题标题】:asp.net postback prevented after clientside validation客户端验证后阻止 asp.net 回发
【发布时间】:2012-04-19 16:40:47
【问题描述】:

我有一个 asp.net 表单,其中包含一个下拉列表,该下拉列表在更改时发回服务器,并在第二个下拉列表中填充一些日期。

表单还包含其他字段,其中一些是经过验证的客户端和一些服务器端。

这是我遇到的问题。如果我收到客户端验证错误,然后尝试更改下拉列表,则不会填充第二个下拉列表。如果我再次更改第一个下拉列表,它会按预期工作。

这是我的提交按钮:

<asp:Button ID="btnSubmit" Text="Submit" runat="server" OnClientClick="Page_ClientValidate(); return checkPassengers();" OnClick="Page_Transfer" ValidationGroup="FormSubmit" />

这是我的客户端验证:

function checkPassengers() {
    if($("#testField").val() == "Name *" || $("#testField").val() == "") {
            $("#pltester").prepend("<p class='fillall'>Please fill in all fields marked with *</p>");
            return false;       
    }
};

下拉菜单:

<asp:UpdatePanel ID="UpdatePanel1" runat="server" >
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="ddl1st" EventName="SelectedIndexChanged" />
    </Triggers>
    <ContentTemplate>
        <asp:DropDownList ID="ddl1st" Width="190" AutoPostBack="true" OnSelectedIndexChanged="ChooseDates1st" runat="server" />
        <asp:DropDownList ID="ddlDepart1st" AutoPostBack="true" runat="server" />
    </ContentTemplate>
</asp:UpdatePanel>

【问题讨论】:

    标签: asp.net vb.net validation client-side-validation server-side-validation


    【解决方案1】:

    我之前在使用更新面板时遇到过很多次这个问题。

    我发现,如果需要验证该字段,那么您必须在元素上实际设置 CausesValidation="true" 才能使其仍然与更新面板一起使用。

    希望对你有所帮助!

    【讨论】:

      【解决方案2】:

      简单地设置CausesValidation="true" 并没有解决我的问题。使用 asp 下拉列表的 SelectedIndexChange 事件时,这似乎是个问题。 我发现的解决方法是通过在回发之前验证不存在的验证组名称来使用 js 重置前端的验证。

      function ignoreValidation() {
                  if (typeof Page_ClientValidate != 'undefined') {
                      Page_ClientValidate('reset-validation');
                      Page_BlockSubmit = false;
                  }
                  return true;
      }
      

      对于下拉列表

      &lt;asp:DropDownList CausesValidation="false" onchange="ignoreValidation();" runat="server" ID="CustomerDropDownList" OnSelectedIndexChanged="LoadCustomers" AutoPostBack="true"/&gt;

      【讨论】:

        【解决方案3】:

        如果不需要验证下拉列表,您可以在初始下拉列表中设置CausesValidation="false"。这将导致它不会触发验证,因此可以随意更改。

        或者,您可以将 DropDownList 放在不同的 ValidationGroup 中,这样更改它就不会触发其他控件的验证。

        【讨论】:

          【解决方案4】:
          function validateCommand(group) {
                  if (typeof (Page_ClientValidate) == 'function') {
                      Page_ClientValidate(group);
                      if (Page_IsValid) {
                          Page_BlockSubmit = !confirm('Are you sure?');
                      }
                  }
              }
          

          【讨论】:

            猜你喜欢
            • 2010-10-28
            • 2011-03-10
            • 1970-01-01
            • 2012-08-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-05-05
            相关资源
            最近更新 更多