2011-04-07 48 views
0

早上好一切,我怎麼能輸出JavaScript來在asp.net MVC3一個看法?

我有我的觀點javascript變量。我一直在做這個...

var skinData = null; 

再上的document.ready ....

$.ajax({ 
       type: 'POST', 
       url: 'theme/getskins', 
       data: {}, 
       contentType: 'application/json; charset=utf-8', 
       success: function(data){ 
        skinData = data; 
       } 
     }); 

我的問題是爲什麼我做這個視圖加載之後。我試圖在_ViewStart.cshtml中執行此操作

viewPage.ViewBag.SkinInfo = new JsonResult { Data = SkinManager.GetSkins() }; 

如何獲取此值並將其值輸出到我的JavaScript變量中。我不認爲我需要做的另一請求時,我真的想推給客戶的第一次出訪。任何提示或建議當然讚賞。我怎樣才能正確地做到這一點?我嘗試了一些這種變化,但顯然不工作。這樣的東西......

var skinData = @ViewBag.SkinInfo.Data;  

這只是輸出的命名空間。任何想法如何正確地做到這一點?

乾杯,
〜在聖地亞哥CK

+0

什麼是'SkinManager.GetSkins()',它是一個.NET對象,一個字符串吧? – 2011-04-07 16:53:18

+0

不,它與屬性 – Hcabnettek 2011-04-07 17:26:07

回答

5

您將要使用一些串行轉換您.GetSkins()方法導致成JSON對象。無論是建在JavaScriptSerializer或json.net

JavaScriptSerializer serializer = new JavaScriptSerializer(); 
viewPage.ViewBag.SkinInfo = serializer.Serialize(SkinManager.GetSkins()); 

,然後在視圖

var skinData = @Html.Raw(ViewBag.SkinInfo); 
+0

一個.NET DataContract類這種不正確地輸出它。使用實體而不是引號... var skinData = {" CookieExpiration ":3650," CookieName ":&etc ... – Hcabnettek 2011-04-07 17:26:38

+0

請參閱更新,嘗試使用@ Html.Raw,因此沒有自動編碼。 – 2011-04-07 17:31:41

3

下面是一個使用HTML幫助做這件事的方式。它會將你的對象轉換成json並把它放到一個javascript變量中。

的HtmlHelper擴展方法

public static MvcHtmlString Jsonize(this HtmlHelper helper, string variableName, object obj) 
{ 
    StringBuilder str = new StringBuilder(); 
    str.Append("<script type='text/javascript'>"); 
    str.Append("var "); 
    str.Append(variableName); 
    str.Append("="); 

    if (obj == null) 
     str.Append("null"); 
    else 
     str.Append(JsonHelper.Serialize(obj)); 

    str.Append(";"); 
    str.Append("</script>"); 
    return MvcHtmlString.Create(str.ToString()); 
} 

的JSON序列。我在這種情況下使用DataContractJsonSerializer。

public class JsonHelper 
{ 
    public static string Serialize(object obj) 
    { 
     string json = null; 
     DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType()); 
     using (MemoryStream ms = new MemoryStream()) 
     { 
      serializer.WriteObject(ms, obj); 
      json = Encoding.Default.GetString(ms.ToArray()); 
     } 
     return json; 
    } 
} 

一旦你有做,你可以用它在你的意見,以創建一個包含對象的JavaScript變量

@Html.Jsonize("data", ViewBag.SkinInfo.Data); 

,這將創造這樣的事情:

<script type='text/javascript'> 
    var data = { your serialized object }; 
</script>