Javascript JQuery/Ajax在Razor页面中发布并重定向到MVC操作返回的视图(也称为表单提交)

Javascript JQuery/Ajax在Razor页面中发布并重定向到MVC操作返回的视图(也称为表单提交),javascript,jquery,ajax,asp.net-mvc,razor,Javascript,Jquery,Ajax,Asp.net Mvc,Razor,我通过JQuery或AJax向MVC操作发布一个json数组,操作会正确处理请求。然而,MVC操作返回了一个视图,我需要重定向到这个视图(或者用它替换一个主体),但我不知道怎么做 因此,除返回值外,操作运行良好: [HttpPost] public ActionResult CreateGet(List<string> itemIds) { List<TempItem> items = new List<TempItem>

我通过JQuery或AJax向MVC操作发布一个json数组,操作会正确处理请求。然而,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);
    }
[HttpPost]
public ActionResult CreateGet(列出项目ID)
{
列表项=新列表();
foreach(itemIds中的字符串项)
{
添加(CallApi.Get(Request.Cookies[“jwt”],“tempitems”,item.ToString()).Content.ReadAsAsync().Result);
}
发票库存=新发票()
{
IsSupplement=项目[0]。IsSupplement,
日期=日期时间。现在,
Employee=CallApi.Get(Request.Cookies[“jwt”],“employees/getprofile”).Content.readasasasync().Result,
InvoiceItems=新列表()
};
foreach(项目中的临时项目)
{
inv.InvoiceItems.Add(新InvoiceItem{Amount=item.Amount,ProductId=item.ProductId,Product=item.Product});
}
返回视图(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
        });
    }
函数CreateInvoice(id){
var selected=$('#'+id).DataTable().rows('.selected').data();
var项目=[];
对于(i=0;i
更新


好吧,我放弃了这种胡说八道,坚持获取通过URL中ID数组的请求。我想我只是做错了。

你应该把
ActionResult
改成
JsonResult
。 然后像这样返回:

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

若您不需要在实际页面中对ajax调用返回的数据执行任何操作,那个么就不应该使用ajax调用。您可以使用submit request并在后端将页面重定向到新页面。

您在AJAX调用中使用url:“/Invoices/CreateGet”,这样您就需要在操作中返回JsonResult。问题是,我成功地在AJAX请求中获得了成功,返回的数据包含
url
invoice
对象。我可以执行
windows.location.href=data.url
,因此页面将重定向到正确的位置,但如何将发票对象传递到此页面?我在您的源代码中看到,发票对象中没有url?