从无Ajax调用将复杂对象从视图发送到MVC操作

时间:2019-07-08 11:18:20

标签: javascript c# asp.net-mvc

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

最终用户为搜索过滤器设置的值,当单击搜索按钮时,ajax调用将返回将重新绑定网格的值。 网格中的每一行都代表“ listIps:class RProperties{ attProperties:{ PRASANTA3=class AttProperty{ Ip:192.168.57.39; Agent:PRASANTA1 ; dstId:PRASANTA2 } } } The above code should be like below format, listIps:class RProperties extends HashMap<String,AttProperty>{ "PRASANTA3"=class AttProperty{ Ip:192.168.57.39; Agent:PRASANTA1 ; dstId:PRASANTA2 } } Here RProperties class should extends from Hashmap , instead of RProperties contains one more class (AttProperties) which again contains the hashmap properties. Here RProperties is a HashMap which contains key("PRASANTA3"),value(AttProperty class values) . ”和“ ItemId”,可以通过复选框选择它们。

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

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

因此,要弄清楚这个问题。我需要将以下值传递给操作:

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

很遗憾,我无法将参数传递给操作。我没有空

使用

时,我不能将动作称为ajax调用

查看(Detail

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);
        }

我需要在“详细信息”操作中为视图准备值

1 个答案:

答案 0 :(得分:2)

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

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