如何使用包含数组的复杂对象构建查询字符串?
How to build a query string with a complex object that includes an array?
我的 google-fu 今天不工作了。我发现了许多类似的问题,但 none 适合我的特定情况。我正在尝试构建一个查询字符串以在不使用 post 的情况下将数据传递到我的 MVC 控制器,因为我正在使用 windows.open 来显示 PDF 文件。
javascript中的对象看起来像这样
{DateValue: "05/31/2020",
StringArray: ["String 1", "String 2", etc],
StringValue: "Some String Value"}
当使用 $.param() 将我的对象转换为参数时,StringArray 变成了
StringArray[]=String 1&StringArray[]=String 2
而对控制器的调用是
window.open('/{controller}/{action}?' + $.param(data), '_blank');
数据就是上面的对象。
ViewModel
public class Model
{
public DateTime DateValue {get;set;}
public List<string> StringArray {get;set;}
public string StringValue {get;set;}
}
控制器调用
public FileContentResult Action(Model model)
{...}
无论出于何种原因,MVC 都无法识别字符串数组。该模型具有 DateValue 和 StringValue 属性的正确值,但 StringArray 始终为空。
您应该可以使用 JSON.stringify()
const data = {DateValue: "05/31/2020",
StringArray: ["String 1", "String 2", etc],
StringValue: "Some String Value"}
window.open('/{controller}/{action}?data=' + JSON.stringify(data), '_blank');
和JSON.parse
//PARAMS = how you ever you planned to retrieve them from the request
const data = JSON.parse(PARAMS.data);
console.log(data);
/*
// outputs:
{
DateValue: "05/31/2020",
StringArray: ["String 1", "String 2", etc],
StringValue: "Some String Value"
}
*/
结束了重构调用以首先进行 ajax 调用,将视图模型放入缓存,然后 return 一个带有缓存键的 url 用于window.open打电话。它需要进行两次服务器调用,但至少我们消除了将所有数据放入查询字符串的需要。
我的 google-fu 今天不工作了。我发现了许多类似的问题,但 none 适合我的特定情况。我正在尝试构建一个查询字符串以在不使用 post 的情况下将数据传递到我的 MVC 控制器,因为我正在使用 windows.open 来显示 PDF 文件。
javascript中的对象看起来像这样
{DateValue: "05/31/2020",
StringArray: ["String 1", "String 2", etc],
StringValue: "Some String Value"}
当使用 $.param() 将我的对象转换为参数时,StringArray 变成了
StringArray[]=String 1&StringArray[]=String 2
而对控制器的调用是
window.open('/{controller}/{action}?' + $.param(data), '_blank');
数据就是上面的对象。
ViewModel
public class Model
{
public DateTime DateValue {get;set;}
public List<string> StringArray {get;set;}
public string StringValue {get;set;}
}
控制器调用
public FileContentResult Action(Model model)
{...}
无论出于何种原因,MVC 都无法识别字符串数组。该模型具有 DateValue 和 StringValue 属性的正确值,但 StringArray 始终为空。
您应该可以使用 JSON.stringify()
const data = {DateValue: "05/31/2020",
StringArray: ["String 1", "String 2", etc],
StringValue: "Some String Value"}
window.open('/{controller}/{action}?data=' + JSON.stringify(data), '_blank');
和JSON.parse
//PARAMS = how you ever you planned to retrieve them from the request
const data = JSON.parse(PARAMS.data);
console.log(data);
/*
// outputs:
{
DateValue: "05/31/2020",
StringArray: ["String 1", "String 2", etc],
StringValue: "Some String Value"
}
*/
结束了重构调用以首先进行 ajax 调用,将视图模型放入缓存,然后 return 一个带有缓存键的 url 用于window.open打电话。它需要进行两次服务器调用,但至少我们消除了将所有数据放入查询字符串的需要。