Ajax.BeginForm() 不会回发到控制器

Ajax.BeginForm() not posting back to the controller

本文关键字:控制器 BeginForm Ajax      更新时间:2023-09-26

我正在尝试为部分中保存的简单列表进行分页以工作,但帖子操作结果从未被调用。

在调试过程中,我可以看到我的按钮在Chrome调试器中被激活,所以我认为问题出在$('form'),但我不确定为什么。

同样通过Chrome控制台,我可以看到单击下一个/上一个时页码计算正确。

我在控制器中的 [HttpPost] 操作方法上有一个断点,它永远不会被调用。

问题不在于后端的 C#,而在于为什么表单一开始没有发布。

我在 Ajax 和 POST 上哪里出了问题?

指数:

@model ViewModel
@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Things</h2>
<div>
    @Html.ActionLink("Create", "Create", "Things", null, new { @class = "modal-link btn btn-sm" })
    <div class="Table">
        <div id="thingsList">
            @Html.Partial("List", Model.ThingList)
        </div>
        @using (Ajax.BeginForm("Index", "Things", FormMethod.Post, new AjaxOptions { HttpMethod = "POST", InsertionMode = InsertionMode.Replace, UpdateTargetId = "thingsList" }))
        {
            <input type="hidden" id="CurrentPage" value="@ViewBag.CurrentPage" />
            <input type="hidden" id="PreviousPage" value="@ViewBag.PreviousPage" />
        }
        <input type="button" onclick="javascript: PrevBtnClick();" class="btn btn-primary" id="PrevBtn" value="Previous" />
        <input type="button" onclick="javascript: NextBtnClick();" class="btn btn-primary" id="NextBtn" value="Next" />
    </div>
</div>
<script type="text/javascript">
    function PrevBtnClick() {
        if (CalculateAndSetPage("Previous")) {
            $('form').submit();
        }
    }
    function NextBtnClick() {
        if (CalculateAndSetPage("Next")) {
            $('form').submit();
        }
    }
    function CalculateAndSetPage(movingType) {
        var current = parseInt($('#CurrentPage').val());
        if (movingType == 'Previous') {
            current--;
        }
        else if (movingType == 'Next') {
            current++;
        }
        else {
            alert('Something has gone wrong');
        }
        $('#CurrentPage').val(current);
    }
</script>

它没有回发的原因是因为它永远不会$('form') - 这应该可以正常工作。

在下面$('#CurrentPage').val(current);添加return true; - 你的 JavaScript 函数if (CalculateAndSetPage("Previous/next"))询问一个是/否(布尔)问题,而你当前的脚本没有回答这个问题。它只有在为真的情况下才会起作用。