1

我有一个表单(在 aspx 页面中),我在同一个表单上使用服务器端验证(验证控件)和 jQuery 验证。

在文本框上,我使用服务器端验证,在提交按钮上,我使用 jQuery 验证。

我在同时使用两者时遇到问题。

形式:-

<form id="form1" runat="server">

<label>Start Date: </label>                                         
<asp:RequiredFieldValidator ID="RequiredFieldValidator3" ControlToValidate="txtstartDate" ForeColor="Red" Text="*" ValidationGroup="onSave" runat="server" ErrorMessage="Enter start date...!!"></asp:RequiredFieldValidator>
<asp:TextBox ID="txtStartDate" runat="server" CssClass="form-control mytxtCalendar" placeholder="Start Date.."></asp:TextBox>

<label> End Date:</label>                                           
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" ControlToValidate="txtEndDate" ForeColor="Red" Text="*" ValidationGroup="onSave" runat="server" ErrorMessage="Enter end date...!!"></asp:RequiredFieldValidator>
<asp:TextBox ID="txtEndDate" runat="server" CssClass="form-control mytxtCalendar" placeholder="End Date.."></asp:TextBox>

<asp:Button ID="btnSaveShift" CssClass="btn btn-default" runat="server" Text="Save" ValidationGroup="onSave" OnClick="btnSaveShift_Click" OnClientClick="CheckDateTimes();" />

<asp:ValidationSummary ID="vlsAdd" ValidationGroup="onSave" ForeColor="Red" ShowMessageBox="true" ShowSummary="false" runat="server" />

</form>

jQuery代码: -

function CheckDateTimes() {
            var Frm_Date = $("#<%=txtStartDate.ClientID %>").val();
            var To_Date = $("#<%=txtEndDate.ClientID %>").val();    

            if (Frm_Date.length > 0 && To_Date.length > 0) {
                if (parseDate(Frm_Date) > parseDate(To_Date)) {
                    alert('Start date can not be greater than to date...!!');
                    $("#<%=txtStartDate.ClientID %>").focus();
                  }
                }
              }

我也尝试过以下 jQuery 函数,但这些函数会停止服务器端验证。

            $("#btnSaveShift").click(function(evt){
            var Frm_Date = $("#<%=txtStartDate.ClientID %>").val();
            var To_Date = $("#<%=txtEndDate.ClientID %>").val();    

            if (Frm_Date.length > 0 && To_Date.length > 0) {
                if (parseDate(Frm_Date) > parseDate(To_Date)) {
                    alert('Start date can not be greater than to date...!!');
                    $("#<%=txtStartDate.ClientID %>").focus();
                    evt.preventDefault();
                  }
                }
              });

这也是:-

<asp:Button ID="btnSaveShift" CssClass="btn btn-default" runat="server" Text="Save" ValidationGroup="onSave" OnClick="btnSaveShift_Click" OnClientClick="return CheckDateTimes();" />

            function CheckDateTimes() {
            var Frm_Date = $("#<%=txtStartDate.ClientID %>").val();
            var To_Date = $("#<%=txtEndDate.ClientID %>").val();    

            if (Frm_Date.length > 0 && To_Date.length > 0) {
                if (parseDate(Frm_Date) > parseDate(To_Date)) {
                    alert('Start date can not be greater than to date...!!');
                    $("#<%=txtStartDate.ClientID %>").focus();
                    return false;
                  }
                }
                return true;
              }
4

2 回答 2

1

如果您需要将 OnClick 和 OnClientClick 与同一个按钮一起使用,则向 OnClientClick 函数添加返回 true 或 false。请检查此链接 示例

于 2016-11-25T05:41:08.120 回答
0

您需要更改 CheckDateTimes 方法以返回 bool 值,然后您可以更改 JS 方法调用, OnClientClick="return CheckDateTimes();"好像这返回 true 只会调用服务器端。如果您需要始终调用服务器端验证,则从 javascript 方法返回 true。

检查Asp .NET 按钮 - OnClientClick="return function()" vs OnClientClick="function()"

于 2016-11-25T05:37:45.633 回答