javascript - 使用 JavaScript 在 AJAX beginform 上中止表单提交

标签 javascript .net asp.net-mvc asp.net-ajax

我正在使用 .NET MVC。我的问题是,如果 JavaScript 语句为 true,我需要中止 AJAX 调用。

<div class="Filter_inner_title white_unifrom out-of-grid">
            @using (Ajax.BeginForm("Search", "Protocol", new AjaxOptions
        {
            HttpMethod = "GET",
            UpdateTargetId = "ajax-content"
        }, new { id = "form" }))
            {
                <div class="head-sys-content dotted-gray-bg white-unifrom-small">
                    <ul class="table-head-branch">
                        <li>
                            <ul class="Select_box_white_bg">
                                <li>
                                    <label class="label">@Html.DrawLabel("BoxNr")</label>
                                    @Html.TextBoxFor(model => Model.Search.BoxNumber, new { @class = "text", @style = "width: 70px" })
                                </li>
                                <li id = "FromDateContainer">
                                    <label class="label">@Html.DrawLabel("from")</label>
                                    @Html.TextBoxFor(model => Model.Search.FromDate, new { @class = "text datePicker" })
                                    <div class="validation-protocol-message">
                                        @Html.ValidationMessageFor(model => Model.Search.FromDate)
                                    </div>                                    
                                </li>
                                <li>
                                    <label class="label">@Html.DrawLabel("to")</label>
                                    @Html.TextBoxFor(model => Model.Search.ToDate, new { @class = "text datePicker" })                                                                        
                                    @Html.ValidationMessageFor(model => Model.Search.ToDate)
                                </li>
                                <li>
                                    <div class="medium-chosen left">
                                        <label class="label">@Html.DrawLabel("protocolType")</label>
                                        @Html.DropDownListFor(model => Model.Search.ProtocolType, new SelectList(Model.ProtocolTypeList, "ID", "Label.Text", Model.Search.ProtocolType), Html.DrawLabel("all"), new { @class = "chosen-select" })
                                    </div>
                                </li>
                            </ul>
                            @Html.HiddenFor(model => Model.Search.PageIndex, new { @class = "PageIndex", @id = "PageIndex" })
                            @Html.HiddenFor(model => Model.Search.ContractId)
                            @Html.HiddenFor(model => Model.Search.IsFromContract)
                            <div class="big-button search left">
                                <input type="submit" value="@Html.DrawLabel("search")" id="SubmitButton" class="arrow-search" />
                            </div>
                        </li>
                    </ul>
                </div>     
            }

这是表格。

$("#form").on("submit", function (e) {
    debugger;

    var FromDate = $("#Search_FromDate").val();
    var ToDate = $("#Search_ToDate").val();
    var FromDateConvert = Globalize.parseDate(FromDate, datePattern);
    var ToDateConvert = Globalize.parseDate(ToDate, datePattern);
    var fromYear = FromDateConvert.getFullYear();
    var toYear = ToDateConvert.getFullYear();
    if (fromYear < 1970) {          
        $("#FromDateContainer span.field-validation-valid").html("@String.Format(Html.DrawLabel("DateOutOfBounds"),Model.Search.FromDate)");
        $("#FromDateContainer span.field-validation-valid").attr("class", "field-validation-error");
        //$(".field-validation-error").css("position", "absolute");
    }
});

如果 if 语句为 true,我需要中止开始的表单调用。 有没有办法停止该特定触发器的每次调用?

最佳答案

我通过使用简单的 from 并在前端验证后进行 ajax 调用解决了这个问题

var datePattern = '@(Thread.CurrentThread.CurrentUICulture.DateTimeFormat.ShortDatePattern)';

$("#form").on("submit", function (e) {
    debugger;
    e.preventDefault();
    var FromDate = $("#Search_FromDate").val();
    var ToDate = $("#Search_ToDate").val();
    var FromDateConvert = Globalize.parseDate(FromDate, datePattern);
    var ToDateConvert = Globalize.parseDate(ToDate, datePattern);
    var fromYear = FromDateConvert.getFullYear();
    var toYear = ToDateConvert.getFullYear();

    if (fromYear < 1970 && toYear < 1970) {

        $("#ToDateContainer span.field-validation-error").html("@String.Format(Html.DrawLabel("DateOutOfBounds"),Model.Search.FromDate)");

        $(".field-validation-error").html("");
        $("#ToDateContainer span.field-validation-valid").addClass("field-validation-error");
        $("#FromDateContainer span.field-validation-valid").html("@String.Format(Html.DrawLabel("DateOutOfBounds"),Model.Search.FromDate)");
        $("#FromDateContainer span.field-validation-valid").attr("class", "field-validation-error");
        $("#ToDateContainer span.field-validation-valid").html("@String.Format(Html.DrawLabel("DateOutOfBounds"),Model.Search.FromDate)");
        $("#ToDateContainer span.field-validation-valid").attr("class", "field-validation-error");
        $(".field-validation-error").show();

    }
    else if (fromYear < 1970) {
        $(".field-validation-error").html("");
        $("#FromDateContainer span.field-validation-valid").html("@String.Format(Html.DrawLabel("DateOutOfBounds"),Model.Search.FromDate)");
        $("#FromDateContainer span.field-validation-valid").attr("class", "field-validation-error");
        $(".field-validation-error").show();
    }
    else if (toYear < 1970) {
        $(".field-validation-error").html("");
        $("#ToDateContainer span.field-validation-valid").html("@String.Format(Html.DrawLabel("DateOutOfBounds"),Model.Search.FromDate)");
        $("#ToDateContainer span.field-validation-valid").attr("class", "field-validation-error");
        $(".field-validation-error").show();
    }


    else {
        $(".field-validation-error").html("");
        $.ajax({
            url: '@Url.Action("Search", "Protocol")',
            contentType: "application/json; charset=utf-8",
            data: $(this).serialize(),
            success: function (data) {
                $('#ajax-content').html(data);
            }
        });

    }

关于javascript - 使用 JavaScript 在 AJAX beginform 上中止表单提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48810644/

相关文章:

javascript - 参数化 Angular 请求的优缺点

javascript - 在包含标签的 contenteditable div 中获取插入符号索引

c# - 如何将 int[] 连接到 .NET 中的字符分隔字符串?

c# - 正则表达式不匹配数字后跟某个字符

asp.net-mvc - 为什么 ValidateInput(False) 不起作用?

c# - 实体不使用代码优先方法更新

c# - 我如何使用验证来强制 ASP.NET MVC 2 中的属性的唯一性?

javascript - jslint:为什么此代码会导致 "Strict violation"错误消息?

javascript - Accordion 是否会导致整个页面重绘?

c# - C# 中最重要的优化性能最佳实践是什么