2017-05-05 59 views
-1

我需要在ASP項目MVC模式中插入一個圖形。 我自己定義了Json格式所需的字符串,它似乎正常工作。 的字符串,由控制器定義是:用ASP插入一個s字符串作爲var函數MVC

{ 
    labels: ['America','Europa', 'Global','Oceania'], 
    datasets: [{ 
     data: [0.20, 0.20, 0.20, 0.40], 
     backgroundColor: ['#a3aaf7','#89a8ff', '#01469b', '#0d1156'], 
     hoverBackgroundColor: ['#beed9e', '#84ffbd', '#0afb00', '#058217'] 
    }] 
} 

要插入的圖表中,使用chart.js之,顯然我需要這個變量傳遞到相應的javascript函數...我嘗試使用HTML助手(@ html.displayfor)以及直接參考模型變量(例如@ Model.Tipologie_json):

<script> 
    var tipologia=new string(@Model.Tipologie_json); 
    window.onload=function(){ 
     var ctx = document.getElementById("Tipologia").getContext("2d"); 
     var myPieChart = new Chart(ctx, { type: 'pie', data: tipologia }); 
    } 
</script> 

但HTML轉換爲:

var tipologia=new string({labels:[&#39;Equity&#39;],datasets:[{ data:[1.00000],backgroundColor:[&#39;#a3aaf7&#39;],hoverBackgroundColor:[&#39;#beed9e&#39;]}]}); 

因此它將'轉換爲等價的代碼,這使得圖表的計算失敗。 如何在不進行任何字符轉換的情況下將變量傳遞給HTML?非常感謝

+0

你可以創建一個類與數組作爲屬性,填充它並使用'JsonConvert.Serialise'(newtonsofts json nuget)。如果你是以字符串形式進行的,我認爲你不會像這樣編碼這樣的引號 – Pete

+0

是的,只是不要創建一個字符串。你甚至不需要自定義類。您可以定義一個匿名對象,並將其直接序列化爲JSON。 –

+0

試試這個'@ Html.Raw(Json.Encode(Model.Tipologie_json))'。 – mmushtaq

回答

0

而是試圖直接插入值到您的JavaScript可以做到這一點的:

<script type="application/json" id="yourData">@Model.YourJson</script> 

如果模型中的數據尚未序列化爲JSON,你可以這樣做:

<script type="application/json" id="yourData"> 
    @Html.Raw(JsonConvert.SerializeObject(Model.YourData, 
     new JsonSerializerSettings 
      { ContractResolver = new CamelCasePropertyNamesContractResolver() })) 
</script> 

還是在控制器序列化(使模型已經包含了JSON),您將設置模型的字符串屬性相同的方式:

model.SomeStringProperty = JsonConvert.SerializeObject(
    Model.YourData, 
    new JsonSerializerSettings 
      { ContractResolver = new CamelCasePropertyNamesContractResolver() }); 

(我使用駝峯JSON的設置,但你可以離開了這一點。)

然後取回從你的JavaScript數據:

var parsed = JSON.parse(document.getElementById("yourData").textContent); 
+0

在我學會了這個之前,我試着把我的JSON放在'中,發現如果數據包含撇號,它會失敗。我把它打印出來並掛在我的小房間裏,給自己寫一封便籤,不要做愚蠢的事情。 –

相關問題