JQuery/Ajax 在 Razor 页面中发布并重定向到 MVC Action 返回的视图(又名表单提交)



我通过JQuery或AJax将json数组发布到MVC Action,Action正确处理请求。但是,然后 MVC 操作返回一个视图,我需要重定向到此视图(或用它替换正文),但我不知道如何。

因此,该操作运行良好,但返回值可能除外:

[HttpPost]
public ActionResult CreateGet(List<string> itemIds)
{
List<TempItem> items = new List<TempItem>();
foreach (string item in itemIds)
{
items.Add(CallApi.Get(Request.Cookies["jwt"], "tempitems", item.ToString()).Content.ReadAsAsync<TempItem>().Result);
}
Invoice inv = new Invoice()
{
IsSupplement = items[0].IsSupplement,
Date = DateTime.Now,
Employee = CallApi.Get(Request.Cookies["jwt"], "employees/getprofile").Content.ReadAsAsync<Employee>().Result,
InvoiceItems = new List<InvoiceItem>()
};
foreach(TempItem item in items)
{
inv.InvoiceItems.Add(new InvoiceItem { Amount = item.Amount, ProductId = item.ProductId, Product = item.Product });
}
return View(inv);
}

以及 razor 页面中的脚本,用于收集选定的 ID 并将其发布到操作中。 发布后没有任何其他反应,即使"查看"页面存在并且我在控制台中看不到失败,也没有调用警报。

function CreateInvoice(id) {
var selected = $('#' + id).DataTable().rows('.selected').data();
var items = [];
for (i = 0; i < selected.length; i++) {
items.push(selected[i][0]);
}
var postData = { itemIds: items };
$.ajax({
type: "POST",
url: "/Invoices/CreateGet",
data: postData,
success: function (data) {
alert("success");
window.location.href = data.url;
},
dataType: "json",
traditional: true
});
}

更新

好吧,我放弃了废话,坚持使用 GET 请求,该请求在 URL 中传递 id 数组。我想我只是做错了事情。

您应该将ActionResult更改为JsonResult。 并像这样返回:

return Json(new {url: "yoururl", inv: yourdata}, JsonRequestBehavior.AllowGet);

如果你不需要在实际页面中对从 ajax 调用返回的数据执行任何操作,则不应使用 ajax 调用。您可以使用提交请求并将后端的页面重定向到新页面。

最新更新