【问题标题】:With asp.net-mvc, can I include stringified json into the query string or a url?使用 asp.net-mvc,我可以将字符串化的 json 包含到查询字符串或 url 中吗?
【发布时间】:2015-01-23 16:34:05
【问题描述】:

我有以下代码用于在我的 asp.net-mvc 站点上运行控制器操作:

asp.net-mvc 控制器操作:

public ActionResult MyAction(PostParams myParams)
{
   //go do stuff
}

其中 PostParams 定义为:

public class PostParams
{
     public int Age {get;set;}
     public string Name {get;set;}
}

Javascript 代码:

$("#myButton").live('click', function (e) {
    window.location.href = "/MyController/MyAction?Age=10&Name=Joe";
});

注意:在有人回复“您应该使用 Ajax”之前,我无法在此处使用 ajax,因为我的控制器操作正在返回文件 as per this question here

我现在需要传入一些额外的数据,这些数据是 jquery UI sortable list like this 的结果,它以 json 格式出现。所以看起来像这样:

$("#myButton").live('click', function (e) {

    var sortables = $(".sortableList");

    var arr = [];
    sortables.each(function () {

    var statusParam = new Object();
    statusParam.Ids = $(this).sortable("toArray");
    arr.push(statusParam);
});

    var myResult = JSON.stringify({ result: arr });

    window.location.href = "/MyController/MyAction?Age=10&Name=Joe";
});

我的问题是,将“myResult”包含在查询字符串中的正确方法是什么,它将正确显示在服务器端。我试过这个:

    var myResult = JSON.stringify({ result: arr });

    window.location.href = "/MyController/MyAction?" + myResult + "&Age=10&Name=Joe";
});

并在 PostParams 中包含一个新字段,如下所示:

 public class PostParams
 {
     public List<MyItem> result {get;set;}
     public int Age {get;set;}
     public string Name {get;set;}
 }

 public class MyItem
 {
     public List<int> Ids { get; set; }
 }

但是当我在服务器端检查时,result似乎总是为空。

【问题讨论】:

  • 您是否在调试器中检查了myResult?您可能缺少&amp;
  • 对不起,这只是问题中的一个错字。我已经更新了问题

标签: jquery asp.net-mvc json jquery-ui-sortable stringify


【解决方案1】:

我不知道这是否实际上不受支持,但我认为您应该尝试在 URL 中发布字符串化数据。

你很容易得到一个巨大的 URL!

为什么不使用$.post 发布所需的数据而不是更新 URL?或者,如果这不可能,为什么不将 ID 附加到 URL 而不是整个对象,然后在服务器端查找该 ID?

更新

如果您必须返回File,那么您可以尝试这种方法:

  1. 将必要的数据发布到服务器
  2. 服务器根据 GUID 将信息存储在临时数据中并返回 GUID
  3. 客户端收到 GUID 并在另一个 URL 中使用它,该 URL 可以针对 window.location.href 设置
  4. 新 URL 的操作从临时数据中获取数据并返回 File

【讨论】:

  • 好问题。我在这里不能使用 ajax 有一个单独的不相关原因(因为控制器操作正在返回 File()。我在我的问题中添加了这一点,因为我可以想象其他人会问同样的事情
  • MyItem 是存储在服务器端的东西,您可以查找吗?您需要MyItem 上的所有属性吗?
  • 不,MyItem 完全是从用户更新 jquery ui 可排序的客户端生成的
  • 我还没有尝试过,但理论上我认为你的解决方案应该可以工作
【解决方案2】:

试试这个..

window.location.href = "/MyController/MyAction?result=" + JSON.stringify(arr) + "&Age=10&Name=Joe";

因为模型绑定器需要“result”键来将数据绑定到你的 veiw 模型的结果属性

【讨论】:

    【解决方案3】:

    您可以尝试像这样构建您的网址:

    window.location.href = "/My/MyAction?result[0].ids=1&result[1].ids=2&result[2].ids=3&result[2].ids=4&Age=10&Name=Joe";
    

    参数:

    【讨论】:

      猜你喜欢
      • 2011-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-09
      • 2011-01-10
      相关资源
      最近更新 更多