Asp.net core mvc Ajax到MVC POST请求:重定向问题;“页面不工作”;
在我的Post请求(从AJAX到控制器)之后,我遇到了一个小问题。基本上,post请求发生,它执行控制器中的函数,但是,在它执行ajax调用后,我得到以下页面: 我不知道为什么会发生这种情况,我希望能得到一些帮助。我以前从未用过这种东西。 以下是一些有帮助的代码片段: 编辑的.js文件: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
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;
}
});