为什么我的ajax在提交用@HtmlRenderPartial加载的表单时只调用fire一次

Why does my ajax call fire only once when submitting forms loaded with @HtmlRenderPartial

本文关键字:表单 调用 一次 fire 加载 ajax 我的 提交 @HtmlRenderPartial 为什么      更新时间:2023-09-26

我有一个索引页面,我用两个局部视图加载它。在加载的每个部分视图上都有一个ajax调用,用于按日期过滤内容。问题是ajax只成功触发一次,随后的表单提交只会导致页面的完全刷新,即ajax没有触发。我将每个脚本移到一个单独的文件中,并在我在Layout页面中调用的捆绑包中引用它。再次尝试会产生相同的结果,即ajax事件只触发一次,当再次单击提交按钮时,不会发生任何事情。下面是我的代码

Index.Cshtml
@{
    ViewBag.Title = "";
    Layout ="~/Views/Shared/_Layout.cshtml";
}
<h2>TRANSACTIONS</h2>
@Html.Action("IndexGrid", "Transactions")
<h2>BREAKDOWN</h2>
@Html.Action("LoanBreakDown", "Transactions")
<div class="ajaxModal"><!-- Place at bottom of page --></div>

IndexGrid.cshtml

<form action="/transactions/index" method="post" id="filterByDate">
            <td colspan="3">
                <label>START:</label> <input type="date" name="StartDate" id="StartDate" />
            </td>
            <td colspan="3">
                <label>END:/label> <input type="date" name="EndDate" id="EndDate" />
            </td>
            <td colspan="3">
       <input type="submit" value="SEARCH" class="btn btn-default submit" />
            </td>
        </form>

LoanBreakDown.chtml

<form action="/transactions/LoanBreakDown" method="post" id="searchloan">
    START: <input type="date" name="StartDate" id="StartDate" />
    END: <input type="date" name="EndDate" id="EndDate" />
    <input type="submit" value="SEARCH" class="btn btn-default" />
</form>

GridDateFilter.js

$(document).ready(function() {
    $("#filterByDate").submit(function() {
        event.preventDefault();
        $("#TransactionTable").empty();
        $.ajax({
            type: "POST",
            url: "/Transactions/IndexGrid",
            data: $(this).serialize(),
            dataType: "html",
            success: function(data) {
                $("#TransactionTable").html(data);
            }
        });
    });
});

分解日期过滤器.js

$(document).ready(function () {
    $("#searchloan").submit(function () {
        event.preventDefault();
        //$(".loading").html("Processing your request...");
        $("#loadbreakdown").empty();
        $.ajax({
            type: "POST",
            url: "/Transactions/LoanBreakDown",
            data: $(this).serialize(),
            dataType: "html",
            success: function (data) {
                $("#loadbreakdown").html(data);
            }
        });
    });
});

GridDateFilter.js负责IndexGrid.cshtml,而BreakdownDateFilter.jss负责LoanBreakDown.chtml。请注意,这两个视图都加载到主页中,即带有@Html.RenderPartial的index.cshtml页面,脚本在调用jquery后包含在布局页面中。

好的,所以我终于解决了这个问题。在chrome的开发工具中搜索了一段时间后,虽然我对javascript不太了解,但我注意到负责搜索功能的表单嵌入了我用ajax帖子的结果替换的div中,因此,dom发生了变化,当我再次提交时,它不再针对同一表单。解决方法是将表单从div和Eureka中移出!它奏效了。