如何从 mvc 控制器 return json 对象和查看 tgt

How to return json object and view tgt from mvc controller

我正在做一个 MVC 应用程序,我需要将 json 对象从控制器传递给视图。

 public ActionResult VisualizeResult(int? id)
        {
            using (var context = new DBQUIZEntities())
            {
                context.Configuration.LazyLoadingEnabled = false;
                List<Choices> stdResult = context.Choices.Where(x => x.QuestionID == id).ToList();
                return Json(stdResult, JsonRequestBehavior.AllowGet);
            }
        }

上面的代码是我在我的控制器中使用的,当我将数据传递到这个视图并打开它时。它 return 我一个 json 字符串。(我理解因为没有 return 视图,所以它 return 一个 json 但如果我将它更改为视图)喜欢我不知道如何在我的视图函数中使用这些数据。

  List<Choices> stdResult = context.Choices.Where(x => x.QuestionID == id).ToList();
                // return Json(stdResult, JsonRequestBehavior.AllowGet);
                return View(stdResult);

我的观点

<head>
    <title>Result Visualization</title>
    <script type="text/javascript" src="https://www.google.com/jsapi"></script>
    <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

    <script>
        $(document).ready(function () {
            $.ajax({
                type: "POST",
                dataType: "json",
                contentType: "application/json",
                url: '@Url.Action("VisualizeResult", "Home")',
                success: function (result) {
                    google.charts.load('current', {
                        'packages': ['corechart']
                    });
                    google.charts.setOnLoadCallback(function () {
                        drawChart(result);
                    });
                }
            });
        });

        function drawChart(result) {
            var data = new google.visualization.DataTable();
            data.addColumn('string', 'Name');
            data.addColumn('number', 'Vote');
            var dataArray = [];


            $.each(result, function (i, obj) {
                dataArray.push([obj.ChoiceText, obj.VoteCount]);
            });
            data.addRows(dataArray);

            var columnChartOptions = {

                width: 1000,
                height: 400,
                bar: { groupWidth: "20%" },
            };

            var columnChart = new google.visualization.PieChart(document
                .getElementById('piechart_div'));

            columnChart.draw(data, columnChartOptions);
        }
    </script>
</head>

现在我想 return 我的视图页面带有这个 json 字符串 我如何通过更改视图或控制器来做到这一点。 我的目标是在 google 图表中显示结果。

你可以这样做

  1. Home/Index 将 returning 查看,您可以相应地设置您的路由器
  2. Home/VisualizeResult 将 return json 上的数据 ajax 调用
public ActionResult Index(int? id)
        {
            return view("chart");
        }
        public ActionResult VisualizeResult(int? id)
        {
            List<Choices> stdResult = GetResult(id, ref context);
            return Json(stdResult, JsonRequestBehavior.AllowGet);
        }

        private static List<Choices> GetResult(int? id, ref DBQUIZEntities context)
        {
            using (var context = new DBQUIZEntities())
            {
                context.Configuration.LazyLoadingEnabled = false;
                List<Choices> stdResult = context.Choices.Where(x => x.QuestionID == id).ToList();
                return stdResult;
            }
        }