2015-10-28 3 views
1

Я хотел бы установить цвета в диаграмме google из моего кода и не знаю, как это сделать. У меня это на странице cshtml.как передать параметры JavaScript на странице cshtml

<script type="text/javascript"> 

    // Load the Visualization API and the piechart package. 
    //google.load('visualization', '1.0', { 'packages': ['bar'] }); 
    google.load('visualization', '1.0', { 'packages': ['corechart'] }); 
    var visualization; 
    // Set a callback to run when the Google Visualization API is loaded. 
    google.setOnLoadCallback(drawCharts); 

    function drawCharts() { 

       var titleName = "Rounding Eligible"; 


       $("#chartHeader").html(titleName); 
       var options = { 
        'backgroundColor': 'transparent', 
        title: titleName, 
        subtitle: 'Range of ddd to ddd', seriesType: "bars",isStacked: true, 
        series: { 0:{color:"#009add"} ,1:{color:"#009844"} ,2: {color:"#ef7521"} ,3: {color:"#89d2e6"},4:{color:"#82bc00"},5:{color:"#f19f53"},6:{color:"#0055b7"},@(Model.NumSeries) : { type: "line", visibleInLegend: false, color: "#FF0000" }}, 
        vAxis:{title: "Count", minValue:10} 

       }; 
       // Create the data table. 
       var data = google.visualization.arrayToDataTable(@Html.Raw(Model.ChartJson)); 
       var chart_div = document.getElementById('chartDiv'); 
       var chart = new google.visualization.ComboChart(chart_div); 

       chart.draw(data, options); 

       //setup a temp image to gold hold the chart 
       createHiddenImage('hiddenCanvas1', 'chartDiv', chart.getImageURI()); 
      } 
    </script> 

То, что я хотел бы сделать, это заменить мои цвета (0: {цвет: "# 009add"}, 1: {цвет: "# 009844"}) должна основываться на чем-то в коде и сделать что-то вроде

isStacked: true, 
series: 
@foreach seriesvalue in @Model.seriesValues 
{@Html.Raw(seriesvalue);}, 
Axis:{title: "Count", minValue:10} 

Я понятия не имею, что это возможно для достижения этой цели, это лучше, чтобы просто передать весь объект опций от модели? В принципе, я не могу понять, как это сделать.

ответ

1

Просто используйте JSON сериализации:

series: @Html.Raw(JsonConvert.SerializeObject(Model.seriesValues)) 

Вы хотите сделать seriesValuesDictionary ключом на номер, который вы хотите, связанных с каждым цветом.

Для более глубокого погружения, увидеть этот ответ: Using Razor within JavaScript

+0

Это приходит близко, но я получаю {: " {цвет: \ " # 009add \ "} ", в тексте вместо {0: {цвет: "# 009add"}, –

+1

@BrianHanf: К сожалению, , это HTML-экранирование. Вам просто нужно добавить 'Html.Raw()' вокруг него. См. Мое обновление. – StriplingWarrior

+0

Забавно, что я обнаружил, что всего несколько минут назад и закончил тестирование, я собирался прийти и добавить эту заметку. Мне нужно было также удалить лишние "и заменить \" на ", я отредактирую, чтобы показать это изменение. –

0

Вы можете получить доступ к свойствам от модели в любом месте на странице, в том числе и в сценарии, с помощью:

@Model.MyPropertyName 

Имея это в виду, ваш Javascript может выглядеть примерно так:

myColor = '@Model.MyGreenColorProperty'; 

Примечание одиночные цитаты вокруг @model ... это очень важно, и не будет работать, если значение не окружен кавычками.

+0

Я строю массив или список цветов для каждого столбца, не знаю, как один цвет будет помогать, я пропущу шаг? –

+0

Хотя это может работать для конкретных случаев, это не очень хороший подход к использованию в целом. Если значение, которое вы выдаете, имеет апостроф, вы разрушите весь скрипт. Если вы используете JSON Serialization вместо этого строковое значение будет автоматически иметь котировки вокруг него, и любые кавычки внутри будут экранированы соответствующим образом. – StriplingWarrior

Смежные вопросы