Передача viewmodel в частичный вид - PullRequest
0 голосов
/ 27 августа 2018

Привет, ребята. Я пытаюсь передать данные через модель представления в частичное представление для создания графика.

Я попробовал следующее в главном окне:

@{
    ViewBag.Title = "Report";
}
@model WebApplication1.ViewModel.DatapointLineViewModel

Я передаю ViewModel частичному представлению следующим образом:

 @{
  Html.RenderPartial("~/Views/Shared/_report_bar.cshtml",WebApplication1.ViewModel.DatapointLineViewModel); }

Я пытаюсь использовать данные в ViewModel через Viewbags:

labels: @Html.Raw(ViewBag.DataPoints),

Я получаю следующую ошибку:

CS0119: «DatapointLineViewModel» - это тип, который недопустим в данный контекст

Это мой View Модель:

 [DataContract]
    public class DatapointLineViewModel
    {

        public DatapointLineViewModel(string label, double y)
        {
            this.Label = label;
            this.Y = y;
        }

        //Explicitly setting the name to be used while serializing to JSON.
        [DataMember(Name = "label")]
        public string Label = "";

        //Explicitly setting the name to be used while serializing to JSON.
        [DataMember(Name = "y")]
        public Nullable<double> Y = null;
    }

Контроллер:

 public ActionResult BarChart()
        {
            List<DatapointLineViewModel> dataPoints = new List<DatapointLineViewModel>();

            dataPoints.Add(new DatapointLineViewModel("USA", 71));
            dataPoints.Add(new DatapointLineViewModel("Great Britain", 67));
            dataPoints.Add(new DatapointLineViewModel("China", 70));
            dataPoints.Add(new DatapointLineViewModel("Russia", 56));
            dataPoints.Add(new DatapointLineViewModel("Germany", 42));
            dataPoints.Add(new DatapointLineViewModel("Japan", 41));
            //dataPoints.Add(new DatapointLineViewModel("France", 42));
            //dataPoints.Add(new DatapointLineViewModel("South Korea", 21));

            ViewBag.DataPoints = JsonConvert.SerializeObject(dataPoints);

            return View();
        }

Скрипт в частичном представлении:

 data: {
                labels: @Html.Raw(ViewBag.DataPoints),
                datasets: [
                    {
                        label: 'My First dataset',
                        data: WebApplication1.ViewModel.DatapointLineViewModel,
                        options: {
                            legend: {
                                display: false
                            }
                        },
                        backgroundColor: [
                            'rgba(152,235,239,0.8)',
                            'rgba(152,235,239,0.8)',
                            'rgba(152,235,239,0.8)',
                            'rgba(152,235,239,0.8)',
                            'rgba(152,235,239,0.8)',
                            'rgba(152,235,239,0.8)'],

                    },

Почему это так? Нужна помощь:).

1 Ответ

0 голосов
/ 27 августа 2018

Вы должны помнить, что вы хотите передать фактические данные на данный момент, а не тип.

@{
    Html.RenderPartial("~/Views/Shared/_report_bar.cshtml", Model);
}

Model содержит экземпляр самих данных, и это то, что вы хотите передать частичному.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...