Ajax发布到控制器,通过复杂的深视图模型将用户重定向到新页面/视图

时间:2019-01-23 12:41:54

标签: jquery asp.net ajax asp.net-mvc razor

我真的很固执,正在寻找有关如何实现此目标的替代建议。

我目前在表格中有复选框。该表单无关紧要,因为它保存了当前记录,但意味着我无法创建嵌套表单来提交此数据,这使Ajax成为必需(我可能错了)。

单击复选框后,将显示一个按钮。单击按钮后,它将使用ajax将复选框的值发布到原始视图中的其他控制器。

然后,控制器创建一个深层复杂的viewmodel对象,我需要返回该视图对象,其中包含与先前选中的框相关的数据。

我似乎无法让浏览器重定向并传递所需的数据。原始的ajax请求来自/ Controller1 / Edit,在传递视图模型数据时,我需要将用户重定向到/ Controller2 / Details。

  • 我尝试将RedirectToAction()与TempData一起用于其他方法,该方法随后返回一个View,但是它不会将浏览器重定向到正确的页面。
  • 如果我在ajax成功之后重定向页面,则无法将viewmodel传递给新页面,因为它不会序列化
  • 因为我发布了Ajax,所以我不能仅仅因为浏览器未重定向而仅仅返回视图

如果有人可以提出建议,我将不胜感激。

很高兴发布代码,但是鉴于我正在寻找替代解决方案,所以也许没有必要。

答案

我保留了ajax,将我的复选框值发布到控制器上

 $.ajax({
     url: AppSettings.baseUrl + "BOM/getMultiBOM",
     type: 'POST',
     data: JSON.stringify(dataArr),
 }).done(function (result) {
       location.href = "/BOM/OpenMultiBOM";

 });

在我的控制器中,我将发布的值分配给postModel,然后将它们存储在TempData中。此处的关键是返回一个Json值,该值随后将允许在客户端进行重定向。

 public ActionResult getMultiBOM(multiBOMPostModel multiBOMPostModel)
    {  
        TempData["BOMs"] =  multiBOMPostModel;
        return Json("success");
    }

然后我有了另一个HttpGet方法,该页面将在Ajax结果重定向页面并将TempData强制转换为对象之后加载。

[HttpGet]
    public ActionResult OpenMultiBOM(int? BomMarkupMessage = null)
    {
        var bomIds = TempData["BOMs"] as multiBOMPostModel;
}

0 个答案:

没有答案