从控制器格式化 JSON 以供插件使用
Format JSON from controller for use by a plugin
我从我的控制器得到一个 JSON 字符串:
public ActionResult Highlight()
{
var statesHighlight =
db.Jobs
.Select(r => r.Location);
return Json(statesHighlight , JsonRequestBehavior.AllowGet);
}
我是通过 Ajax 请求获取的,如下所示:
$.ajax({
async: false,
url: '@Url.Action("Highlight", "Jobs1")',
data: JSON.stringify(),
type: 'POST',
success: function (data) {
citydata = data;
}
});
问题是这不会保持我的字符串的格式。调用控制器操作显示它的格式正确 JSON,但是一旦它从我的 Ajax 请求中出来,它就不是了。这里直接来自控制器:
["HDQ","HDQ","EVA","HDQ","HDQ","HDQ","EVA","SVF","SVF","SVF","SVF","DFC","DCF","Feedlot","DCF","DCF","DCC","AGNW","AGNW"]
有什么方法可以确保这是在将变量传递给我的插件之前设置给变量的值吗?
我使用的插件叫做 ImageMapster。目前,我已经对其进行了硬编码 JSON,并且它按预期工作。
var data = $.parseJSON($('#map-data').text());
var cities = $.parseJSON($('#city-data').text());
$('img').mapster({
mapKey: 'state',
clickNavigate: true,
isSelectable: false,
highlight: false,
onConfigured: function () {
// make the array into a comma-sparated list
var state_list = data.join(',');
var city_list = cities.join(',');
// the 'set' activates the areas
$('img').mapster('set', true, state_list, options = { fillColor: '638EA5' });
$('img').mapster('set', true, city_list, options = { fillColor: 'ffffff' });
}
});
你的 statesHighlight
只是一个简单的 System.String[]
吗?那么您将始终在 javascript.
中获得纯字符串数组对象
但是你想要 var a = { data1 : "a", data2 : "b", data3 : "c" };
JSON
基本上由Key & Value
组成。 C# 中数据类型的等价物是 Dictionary
。当您将数据解析为 Json.
时,您需要传递 Dictionary
类型或任何其他键值对象
public ActionResult Highlight()
{
var statesHighlight =
db.Jobs
.Select(r => r.Location);
// statesHighlight should be Dictionary
// if you want a JSON result having keys and values.
return Json(statesHighlight , JsonRequestBehavior.AllowGet);
}
如果您只需要字符串数组的键名,您可以像这样设置一个键名。
//return Json(statesHighlight , JsonRequestBehavior.AllowGet);
return Json(
new {
keyname = statesHighlight
}
, JsonRequestBehavior.AllowGet
);
我完全找错了答案。格式很好;当我仔细查看我最初使用的变量的格式时,我发现了这一点。事实证明,我让事情变得比他们需要的更复杂。绕过我的增量步骤之一最终成为正确的解决方案。这是我的最终代码:
//retrieve JSON strings from controller
var citydata = {};
$.ajax({
async: false,
url: '@Url.Action("Highlight", "Jobs1")',
method: 'GET',
success: function (data) {
citydata = data;
}
});
var statedata = {};
$.ajax({
async: false,
url: '@Url.Action("HighlightState", "Jobs1")',
method: 'GET',
success: function (data) {
statedata = data;
}
});
//imagemapster to generate map behaviors
$('img').mapster({
mapKey: 'state',
clickNavigate: true,
isSelectable: false,
highlight: false,
onConfigured: function () {
// make the array into a comma-sparated list
var state_list = statedata.join(',');
var city_list = citydata.join(',');
// the 'set' activates the areas
$('img').mapster('set', true, state_list, options = { fillColor: '638EA5' });
$('img').mapster('set', true, city_list, options = { fillColor: 'ffffff' });
}
});
我从我的控制器得到一个 JSON 字符串:
public ActionResult Highlight()
{
var statesHighlight =
db.Jobs
.Select(r => r.Location);
return Json(statesHighlight , JsonRequestBehavior.AllowGet);
}
我是通过 Ajax 请求获取的,如下所示:
$.ajax({
async: false,
url: '@Url.Action("Highlight", "Jobs1")',
data: JSON.stringify(),
type: 'POST',
success: function (data) {
citydata = data;
}
});
问题是这不会保持我的字符串的格式。调用控制器操作显示它的格式正确 JSON,但是一旦它从我的 Ajax 请求中出来,它就不是了。这里直接来自控制器:
["HDQ","HDQ","EVA","HDQ","HDQ","HDQ","EVA","SVF","SVF","SVF","SVF","DFC","DCF","Feedlot","DCF","DCF","DCC","AGNW","AGNW"]
有什么方法可以确保这是在将变量传递给我的插件之前设置给变量的值吗?
我使用的插件叫做 ImageMapster。目前,我已经对其进行了硬编码 JSON,并且它按预期工作。
var data = $.parseJSON($('#map-data').text());
var cities = $.parseJSON($('#city-data').text());
$('img').mapster({
mapKey: 'state',
clickNavigate: true,
isSelectable: false,
highlight: false,
onConfigured: function () {
// make the array into a comma-sparated list
var state_list = data.join(',');
var city_list = cities.join(',');
// the 'set' activates the areas
$('img').mapster('set', true, state_list, options = { fillColor: '638EA5' });
$('img').mapster('set', true, city_list, options = { fillColor: 'ffffff' });
}
});
你的 statesHighlight
只是一个简单的 System.String[]
吗?那么您将始终在 javascript.
但是你想要 var a = { data1 : "a", data2 : "b", data3 : "c" };
JSON
基本上由Key & Value
组成。 C# 中数据类型的等价物是 Dictionary
。当您将数据解析为 Json.
Dictionary
类型或任何其他键值对象
public ActionResult Highlight()
{
var statesHighlight =
db.Jobs
.Select(r => r.Location);
// statesHighlight should be Dictionary
// if you want a JSON result having keys and values.
return Json(statesHighlight , JsonRequestBehavior.AllowGet);
}
如果您只需要字符串数组的键名,您可以像这样设置一个键名。
//return Json(statesHighlight , JsonRequestBehavior.AllowGet);
return Json(
new {
keyname = statesHighlight
}
, JsonRequestBehavior.AllowGet
);
我完全找错了答案。格式很好;当我仔细查看我最初使用的变量的格式时,我发现了这一点。事实证明,我让事情变得比他们需要的更复杂。绕过我的增量步骤之一最终成为正确的解决方案。这是我的最终代码:
//retrieve JSON strings from controller
var citydata = {};
$.ajax({
async: false,
url: '@Url.Action("Highlight", "Jobs1")',
method: 'GET',
success: function (data) {
citydata = data;
}
});
var statedata = {};
$.ajax({
async: false,
url: '@Url.Action("HighlightState", "Jobs1")',
method: 'GET',
success: function (data) {
statedata = data;
}
});
//imagemapster to generate map behaviors
$('img').mapster({
mapKey: 'state',
clickNavigate: true,
isSelectable: false,
highlight: false,
onConfigured: function () {
// make the array into a comma-sparated list
var state_list = statedata.join(',');
var city_list = citydata.join(',');
// the 'set' activates the areas
$('img').mapster('set', true, state_list, options = { fillColor: '638EA5' });
$('img').mapster('set', true, city_list, options = { fillColor: 'ffffff' });
}
});