Jquery 使用asp.net-mvc,我可以在查询字符串或url中包含字符串化的json吗?

Jquery 使用asp.net-mvc,我可以在查询字符串或url中包含字符串化的json吗?,jquery,asp.net-mvc,json,jquery-ui-sortable,stringify,Jquery,Asp.net Mvc,Json,Jquery Ui Sortable,Stringify,我使用以下代码在asp.net-mvc站点上运行控制器操作: asp.net-mvc控制器操作: public ActionResult MyAction(PostParams myParams) { //go do stuff } $("#myButton").live('click', function (e) { window.location.href = "/MyController/MyAction?Age=10&Name=Joe"; }); 其中后参数定义

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

asp.net-mvc控制器操作:

public ActionResult MyAction(PostParams myParams)
{
   //go do stuff
}
$("#myButton").live('click', function (e) {
    window.location.href = "/MyController/MyAction?Age=10&Name=Joe";
});
其中后参数定义为:

public class PostParams
{
     public int Age {get;set;}
     public string Name {get;set;}
}
Javascript代码:

public ActionResult MyAction(PostParams myParams)
{
   //go do stuff
}
$("#myButton").live('click', function (e) {
    window.location.href = "/MyController/MyAction?Age=10&Name=Joe";
});
注意:在有人回答“您应该使用Ajax”之前,我无法在这里使用Ajax,因为我的控制器操作正在返回一个文件

我现在需要传入一些额外的数据,这些数据是作为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";
});
 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; }
 }
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";
我的问题是,将“myResult”包含到查询字符串中并正确显示在服务器端的正确方法是什么。我试过这个:

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

    window.location.href = "/MyController/MyAction?" + myResult + "&Age=10&Name=Joe";
});
并在后参数中包含一个新字段,如下所示:

$("#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";
});
 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; }
 }
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";
公共类后参数
{
公共列表结果{get;set;}
公共整数{get;set;}
公共字符串名称{get;set;}
}
公共类MyItem
{
公共列表ID{get;set;}
}

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

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

你可以很容易地得到一个巨大的URL

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

更新

如果必须返回
文件
,则可以尝试以下方法:

  • 将必要的数据发布到服务器
  • 服务器根据GUID将信息存储在临时数据中,并返回GUID
  • 客户端接收GUID并在另一个URL中使用它,该URL可以根据
    window.location.href
  • 新URL的操作从临时数据中获取数据并返回
    文件
  • 试试这个

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

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

    您可以尝试如下方式构建url:

    $("#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";
    });
    
     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; }
     }
    
    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";
    
    参数:


    您是否在调试器中检查了
    myResult
    ?您可能缺少一个
    &
    对不起,这只是问题中的一个输入错误。我已经更新了问题好的问题。我不能在这里使用ajax还有另外一个不相关的原因(因为控制器操作返回一个文件()。我在我的问题中添加了这一点,因为我可以想象其他人会问同样的问题。这是存储在服务器端的东西,您可以查找吗?您需要
    MyItem
    上的所有属性吗?不,MyItem完全是由更新jquery ui Sortable的用户在客户端生成的。我还没有尝试过,但理论上我需要它nk你的解决方案应该对我有效