2011-12-23 58 views
0

我輸出存在於JS本地化資源定位鍵/值對成lang.js這樣的:輸出變量名JSON結果之前

[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"} 
+0

考慮一些建議包含在[這篇文章關於JSONP在MVC3](http://stackoverflow.com/a/4797071/416518),這有趣的足夠[Darin Dimitrov](http://stackoverflow.com/users/29407 /達林-dimitro v)誰在下面提供了答案。 :) – lsuarez 2011-12-23 20:53:45

回答

0

您可以使用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

完美。謝謝! – Normandy 2011-12-23 21:00:56

0

它看起來像你想要返回一個腳本,而不是一個JSON對象。在這種情況下,我會做的兩件事情

一個
  1. 返回一個封裝腳本,而不是JSON(不知道如果存在的話)
  2. 返回JSON,然後是JSON設置在一個局部變量的作用結果客戶端(典型的阿賈克斯調用)