Jquery 使用asp.net-mvc,我可以在查询字符串或url中包含字符串化的json吗?
我使用以下代码在asp.net-mvc站点上运行控制器操作: asp.net-mvc控制器操作: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"; }); 其中后参数定义
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你的解决方案应该对我有效