Asp.net core mvc Ajax到MVC POST请求:重定向问题;“页面不工作”;

Asp.net core mvc Ajax到MVC POST请求:重定向问题;“页面不工作”;,asp.net-core-mvc,http-post,asp.net-ajax,Asp.net Core Mvc,Http Post,Asp.net Ajax,在我的Post请求(从AJAX到控制器)之后,我遇到了一个小问题。基本上,post请求发生,它执行控制器中的函数,但是,在它执行ajax调用后,我得到以下页面: 我不知道为什么会发生这种情况,我希望能得到一些帮助。我以前从未用过这种东西。 以下是一些有帮助的代码片段: 编辑的.js文件: function Export() { var donations = new Array(); $("#Donations tbody tr").eac

在我的Post请求(从AJAX到控制器)之后,我遇到了一个小问题。基本上,post请求发生,它执行控制器中的函数,但是,在它执行ajax调用后,我得到以下页面:

我不知道为什么会发生这种情况,我希望能得到一些帮助。我以前从未用过这种东西。 以下是一些有帮助的代码片段:

编辑的.js文件:

    function Export() {
   

    var donations = new Array();
    $("#Donations tbody tr").each(function () {
        var row = $(this);
        var donation = {};
        donation.Name = row.find("td").eq(0)[0].innerText;
        donation.DOB = row.find("td").eq(1)[0].innerText;
        donation.DOD = row.find("td").eq(2)[0].innerText;
        donation.COD = row.find("td").eq(3)[0].innerText;
        donation.CaseNumber = row.find("td").eq(4)[0].innerText;
        donations.push(donation);
    });

    
    $.ajax({
        type: "POST",
        url: "/Donation/Export",
        data: JSON.stringify(donations),
        dataType: "json",
        success: function (data) {
            console.log("file saved: ", data);            
        }
    }).done(function () {
        window.location.href = '@Url.Action("Download", "DonationController", new { csv = data }))';
    });;
};
已编辑Index.cshtml:

 @using (Html.BeginForm())
{

    <p>
        <input type="submit" class="btn btn-outline-primary btn-sm" value="Export" onclick="Export()" />

    </p>


    <table id="Donations" class="table">
        <thead>
            <tr>
                <th>Full Name</th>
                <th>@Html.DisplayNameFor(model => model.Person.DateOfBirth)</th>
                <th>@Html.DisplayNameFor(model => model.Donation.DateOfDeath)</th>
                <th>@Html.DisplayNameFor(model => model.Donation.CauseOfDeath)</th>
                <th>@Html.DisplayNameFor(model => model.Donation.CaseNumber)</th>
            </tr>
        </thead>
        <tbody>
            @foreach (var item in Model.Donations)
            {
                <tr>
                    <td><a asp-action="Details" asp-controller="Person" asp-route-id="@item.PersonId">@Html.DisplayFor(modelItem => item.Person.Title) @Html.DisplayFor(modelItem => item.Person.Forenames) @Html.DisplayFor(modelItem => item.Person.Surname)</a></td>
                    <td>@Html.DisplayFor(modelItem => item.Person.DateOfBirth)</td>
                    <td>@Html.DisplayFor(modelItem => item.DateOfDeath)</td>
                    <td>@Html.DisplayFor(modelItem => item.CauseOfDeath)</td>
                    <td><a asp-action="Details" asp-controller="Donation" asp-route-id="@item.PersonId">@Html.DisplayFor(modelItem => item.CaseNumber)</a></td>
                </tr>
            }
        </tbody>
    </table>
}

无法将文件作为查询字符串传递,这将导致负载格式为不受支持的格式。这将导致一场灾难

在导出方法中(
IActionResult,返回一个Jsonresult
):

在ajax中:

$.ajax({
    type: "POST",
    url: "/Donation/Export",
    data: JSON.stringify(donations),
    dataType: "json",
    success: function (data) {
                console.log("file saved: ", data);
                window.location = '/Donation/Download?csv=' + data.csv;
            }
        });

您是否尝试在控制器中使用
[FromForm]
而不是
[FromBody]
?但控制器必须已经知道来自视图的数据,并且它可以处理。您的主要问题是什么:不使用Ajax post请求访问控制器?或者从post获取数据后出现重定向问题@HK1232@Gökhan Aldanmaz问题是后者,从post获取数据后的重定向问题。基本上,只要我单击Export按钮,就会发出ajax post调用,然后它就会转到控制器中的Export函数,这时我就得到了415错误(甚至在返回语句-im调试-)之前)。我只是尝试了[FromForm],但是发布的数据现在是空的。嘿,谢谢你的反馈。我按照你的建议更新了我的代码,但是我仍然得到了415错误。基本上,只要我单击Export按钮,就会发出ajax post调用,然后它就会转到控制器中的Export函数,这就是我得到415错误的时候(甚至在它到达Export的返回语句之前)。那么,按照您的建议,我是否可以在onsuccess中从ajax调用下载函数?我在帖子中编辑了我的代码,不再出现415错误,所以这很好!但是我可能在调用下载函数方面做了一些错误的事情,因为在导出中返回csv字符串之后,下载函数就不存在了。你知道会出什么问题吗?再次感谢你的帮助。很抱歉,如果这些是基本问题,我还没有做太多的工作。谢谢@HK1232,我已经更新了我的答案,你可以查看。非常感谢!!!!我调整了一些,并将您的更改添加到我的代码中,效果非常好。再次感谢你的回应!
[HttpPost]
public IActionResult Export([FromBody] List<ExportedValues> values)
    {
      //...
      return new JsonResult (new {csv = csv });
    }
 public FileContentResult Download(string csv)
   {
       return File(//Convert to your file)
   }
$.ajax({
    type: "POST",
    url: "/Donation/Export",
    data: JSON.stringify(donations),
    dataType: "json",
    success: function (data) {
                console.log("file saved: ", data);
                window.location = '/Donation/Download?csv=' + data.csv;
            }
        });