如何从 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 图表中显示结果。
你可以这样做
- Home/Index 将 returning 查看,您可以相应地设置您的路由器
- 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;
}
}
我正在做一个 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 图表中显示结果。
你可以这样做
- Home/Index 将 returning 查看,您可以相应地设置您的路由器
- 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;
}
}