使用ASP MVC为javascript函数插入s字符串作为var

时间:2017-05-05 12:55:39

标签: javascript c# asp.net-mvc

我需要在ASP项目中插入一个图形,即MVC模式。 我自己定义了Json格式所需的字符串,它似乎正常工作。 由控制器定义的字符串是:

{ 
    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 helper(@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?非常感谢

1 个答案:

答案 0 :(得分: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);