将表的选定行提交到MVC操作,然后重定向到返回的视图

时间:2019-02-08 13:15:18

标签: c# jquery asp.net-mvc razor datatables

我正在使用datatables插件来选择行。使用JQuery,我可以提取选定的行。然后,我将一组ID(行)发布到MVC控制器操作中,但是此操作应返回一个包含模型对象的View,该对象包含先前的行,我需要重定向到该View。

我发现Post / Redirect / Get模式几乎符合我的需求,那里的重定向用于将用户重定向到确认页面。但是此模式假定行是在Post阶段插入到数据库中,而不是在Get阶段检索到。有没有一种方法可以在不存储行的情况下做到精确?

我尝试对MVC Action使用JQuery / AJax发布请求。然后,该操作从已发布的行创建发票对象,然后应返回类似于以下内容的信息:

return View(inv);

我最终改为使用下一行,该行包含“查看”页面及其模型对象的url,但是我不知道如何使用JQuery重定向到具有该模型的页面:

return Json(new { Url = "Invoices/Create", invoice = inv });

因此,我需要从JQuery / Ajax发布请求重定向到返回的View(模型对象)。

我的Ajax请求。数据包含url和发票模型,但是我只能重定向到url,并且不知道如何传递发票模型:

        $.ajax({
            type: "POST",
            url: "/Invoices/CreateGet",
            data: postData,
            success: function (data) {
                alert("success");
                window.location.href = data.url;
            },
            dataType: "json",
            traditional: true
        });

为明确起见,剃须刀页面应采用发票模型,然后生成页面:

@model WebMvc.Models.Invoice

@{
    ViewData["Title"] = "Create";
}

<h1>Create</h1>

<h4>Invoice</h4>
<div> ... </div>

更新

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

2 个答案:

答案 0 :(得分:-1)

您可以使用TempData:

    TempData["invoice"] = inv ;
    return RedirectToAction("Invoices", "Create");

在“创建”操作中:

     public ActionResult Create() {
        ...
        var inv = TempData["invoice"];
        ...
     }

答案 1 :(得分:-1)

您可以使用TempData:

TempData["invoice"] = inv ;
return RedirectToAction("Invoices", "Create");

在“创建”操作中:

public ActionResult Create() {
    ...
    var inv = TempData["invoice"];
    ...
 }