【问题标题】:Send complex object from view to MVC action as none ajax call将复杂对象从视图发送到 MVC 操作作为无 ajax 调用
【发布时间】:2019-07-08 11:18:20
【问题描述】:

我正在开发一个 ASP.NET MVC Web 应用程序。 有一个带有一堆搜索过滤器的视图,页面中间还有一个网格,表示搜索结果。

最终用户为搜索过滤器设置值,当单击搜索按钮时,ajax 调用返回将重新绑定网格的值。 网格中的每一行代表“ItemId”和“version”,可以通过复选框来选择。

最后,当用户点击“Detail report”时,我们需要将用户重定向到另一个页面(视图)。

我需要将选定的搜索过滤器和网格选定的行值作为(ItemIds[] and Versions[]) 这样的数组传递给“Detail”操作。

所以,把问题说清楚。我需要将以下值传递给操作:

  1. 搜索过滤器
  2. ItemId 数组
  3. 版本数组

很遗憾,我无法将参数传递给动作。我得到了空

当我使用时,我不能将操作称为 ajax 调用

查看 (Index.cshtml)

 function prepareSelectedInfos() {
            var formValues = $('#form').serializeFormToObject();
            var gridValues = GetGridSelectedValues();
            var dto = {
                FormFilters: formValues,
                ItemIds : gridValues.ItemIds,
                Versions : gridValues.Versions
            } 
            return dto;
        }


  $('#lnkDetailReport').click(function () {
            var gridValues = GetGridSelectedValues();

            var url = '/Report/Controller/Detail/';
            var dto = prepareSelectedInfos();
            window.open(url + dto, '_blank');
        });

控制器

  public ActionResult Detail(ModelVersionStatisticalDetailDto data)
        {

            //create a ViewModel according to the incoming data
            var viewModel = ;
            return View(viewModel);
        }

型号

  public class ModelVersionStatisticalDetailDto
    {
        public ModelVersionStatisticalReportDto FormFilters { get; set; }
        public int [] ItemIds { get; set; }
        public string[] Versions { get; set; }
    }

我需要在 Detail 操作中准备好视图值

【问题讨论】:

    标签: javascript c# asp.net-mvc


    【解决方案1】:

    据我所知,在 ajax 调用中发布一个复杂对象(使用相同的发布参数)后,无法执行重定向。 为了执行您想要的操作,您可以从下面选择一个解决方案。

    1. Detail 操作中使用查询字符串并执行简单的 post 操作而不是 ajax 调用
    2. 尝试将 Detail 操作的响应替换为Partial View
    3. 如果您正在寻找客户端解决方案,您可以通过 localStorage 对象提供帮助(一个棘手的解决方案)。您可以将所需的数据存储在 localStorage 对象中并将密钥传递给控制器​​。在目标页面中,使用键来获取存储在存储中的数据。不要忘记在此过程后清除它。 https://blog.logrocket.com/the-complete-guide-to-using-localstorage-in-javascript-apps-ba44edb53a36/

    【讨论】:

    • 我不想将数据作为查询字符串发送,因为 ItemIds 数组和 Version 数组的长度太大。
    • 它不能是局部视图,因为我们的框架我们应该分开视图以设置它们的权限
    • 不幸的是,它没有。
    • 我认为我必须采用您的第二个解决方案(使用局部视图)。我们在某些浏览器中对查询字符串长度有限制,所以第一个解决方案对我不起作用。 link
    • 感谢 @mahyar-mottaghi-zadeh 我使用了 localStorage,它非常适合我。
    猜你喜欢
    • 2015-08-29
    • 1970-01-01
    • 2013-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多