0

我从我的控制器得到一个 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' });
    }
});
4

2 回答 2

0

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
);
于 2015-05-11T23:43:45.850 回答
0

我正在寻找完全错误的地方来寻找答案。格式很好;当我仔细查看我最初使用的变量的格式时,我发现了这一点。事实证明,我让事情变得比他们需要的更复杂。绕过我的增量步骤之一最终成为正确的解决方案。这是我的最终代码:

 //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' });
    }
});
于 2015-05-13T15:45:03.313 回答