使用 HTML5 Ajax 表单属性不适用于 ASP.NET MVC,仍被重定向到 Action URL

Using HTML5 Ajax form attributes not working with ASP.NET MVC, still being redirected to the Action url

本文关键字:重定向 URL Action MVC NET 表单 Ajax HTML5 属性 不适用 ASP      更新时间:2023-09-26

单击提交按钮时,它会进入控制器的GetProducts操作方法,该方法返回我将在成功函数中处理的 JSON 日期列表。

但是,我不断被重定向到Products/GetProducts,并在空白页面上的 Web 浏览器中看到 JSON 日期列表。如果不使用 ajax,这是正常的,但我想我指定我希望这个表单在表单属性中是 AJAX。

我的最终目标是检索日期,然后将它们添加到页面上的div中,而不会有任何页面重定向或闪烁。

表单声明:

<form asp-action="GetProducts" id="myForm" data-ajax="true" data-ajax-method="POST" data-ajax-success="myForm_AjaxSuccess">
    <input type="submit" value="Generate Products" class="btn btn-default" />
</form>

成功JS函数:

function myForm_AjaxSuccess(data) {
    alert(data);
}

操作方法:

    // POST: Products/GetProducts
    [HttpPost]
    //[ValidateAntiForgeryToken]
    public IActionResult GetProducts(ProductViewModel vm)
    {
        IList<DateTime> dateList = new List<DateTime>()
        {
            new DateTime(2012, 01, 12),
            new DateTime(2012, 02, 12,
            new DateTime(20162, 03, 12)
        };
        return Json(dateList);
    }

请注意,如果有任何不同,此表单将在 Telerik 剑道对话框窗口中打开。我不确定为什么这会阻止 ajax 在提交表单时工作。


这是我目前这样做的另一种方法,它运行良好,但我想使用 html5 ajax 助手让它工作,如上所述:

$('#myForm').submit(function (e) {
    e.preventDefault();
    $.ajax({
        type: "POST",
        url: "/Products/GetProducts",
        data: $('#myForm').serialize(),
        datatype: "json",
        success: function (data) {
            alert(data);
        }
    });
});

@BlakeRivelll:没有什么能阻止AJAX工作(正如您在问题中提到的(,因为应用程序确实进入了控制器内的"GetProducts"方法。

你能在AJAX调用中将"数据类型"指定为"json"吗?您期望的是 JSON 返回类型而不是 html,是吗?

"dataType"是你期望从服务器返回的内容:json,html,text等。 jQuery将使用它来弄清楚如何填充成功函数的参数。