【问题标题】:Ajax is not able to call the controller methodAjax 无法调用控制器方法
【发布时间】:2021-05-22 20:24:27
【问题描述】:

我的 jQuery on click 函数正在工作,但 ajax 没有调用控制器方法。从我目前发现的情况来看,通常 url 路由是问题所在,但即使在纠正了问题之后,ajax 仍然无法正常工作。我还有什么遗漏的吗?

表格

                <form id="languageCreateForm">
                    <div class="form-group">
                        <label for="recipient-name" class="col-form-label">Category Name</label>
                        <input name="@createlanguage.Name" type="text" class="form-control">
                    </div>
                    <div class="form-group text-center">
                        <input id="languagePostButton"  type="submit" class="btn btn-primary" />
                    </div>
                </form>

jQuery

$('#languagePostButton').on("click", function () {
    var data = $("#languageCreateForm").serialize();
    $.ajax(
        {
            type: 'POST', 
            url: 'languages/CreateAjx',
            dataType: "text";
            data: data,
            success: function () {
                alert("language create fired");
            }
        });

});

控制器

        [HttpPost]
        [ValidateAntiForgeryToken]
        public async  Task<JsonResult> CreateAjx(language language)
        {
            var result = false;


            if (ModelState.IsValid)
            {
                _context.Add(language);
                await _context.SaveChangesAsync();
                result = true;
            }
            return Json(result);

        }

【问题讨论】:

    标签: jquery ajax asp.net-mvc razor-pages


    【解决方案1】:

    您在 Action 方法上有一个 ValidateAntiForgeryToken 属性。但是您似乎没有生成或传递令牌。添加

     @Html.AntiForgeryToken()
    

    在表单元素中。然后生成的隐藏字段会被包含在 AJAX 帖子中。

    还需要防止提交按钮的默认动作:

    $('#languagePostButton').on("click", function (e) {
        e.preventDefault();
        var data = $("#languageCreateForm").serialize();
        $.ajax(
            {
                type: 'POST', 
                url: 'languages/CreateAjx',
                dataType: "text";
                data: data,
                success: function () {
                    alert("language create fired");
                }
            });
    
    });
    

    【讨论】:

    • 谢谢迈克!永远忘记 .preventdefault()。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-27
    • 1970-01-01
    相关资源
    最近更新 更多