Вывести имя переменной до результата Json - PullRequest
0 голосов
/ 24 декабря 2011

Я выводю пары ключ / значение локализации, присутствующие в ресурсе локализации JS, в lang.js следующим образом:

    [Route("js/lang.js")]
    public ActionResult Lang()
    {
        ResourceManager manager = new ResourceManager("Normandy.App_GlobalResources.JsLocalization", System.Reflection.Assembly.GetExecutingAssembly());
        ResourceSet resources = manager.GetResourceSet(CultureInfo.CurrentCulture, true, true);

        Dictionary<string, string> result = new Dictionary<string, string>();

        IDictionaryEnumerator enumerator = resources.GetEnumerator();

        while (enumerator.MoveNext())
            result.Add((string)enumerator.Key, (string)enumerator.Value);

        return Json(result);
    }

Содержимое /js/lang.js (я включаю файл с обычным тегом <script>):

{"Test":"test","_Lang":"en"}

Есть ли способ заставить их быть:

var LANG = {"Test":"test","_Lang":"en"}

Ответы [ 2 ]

0 голосов
/ 24 декабря 2011

Вы можете использовать JSONP.Напишите результат пользовательского действия:

public class JsonpResult: ActionResult
{
    public readonly object _model;
    public readonly string _callback;

    public JsonpResult(object model, string callback)
    {
        _model = model;
        _callback = callback;
    }

    public override void ExecuteResult(ControllerContext context)
    {
        var js = new JavaScriptSerializer();
        var jsonp = string.Format(
            "{0}({1})", 
            _callback, 
            js.Serialize(_model)
        );
        var response = context.HttpContext.Response;
        response.ContentType = "application/json";
        response.Write(jsonp);
    }
}

, а затем в своем действии контроллера верните его:

[Route("js/lang.js")]
public ActionResult Lang()
{
    ...
    return new JsonpResult(result, "cb");
}

и, наконец, определите обратный вызов для захвата json, прежде чем включать скрипт:

<script type="text/javascript">
function cb(json) {
    // the json argument will represent the JSON data
    // {"Test":"test","_Lang":"en"}
    // so here you could assign it to a global variable
    // or do something else with it
}
</script>
<script type="text/javascript" src="js/lang.js"></script>
0 голосов
/ 24 декабря 2011

Похоже, вы хотите вернуть скрипт, а не объект json.в этом случае я бы сделал одну из двух вещей:

  1. вернул бы результат действия, который инкапсулирует скрипт, а не json (не уверен, что он существует)
  2. вернул json и затем установил этот jsonк локальной переменной на клиенте (типичный вызов ajax)
...