C# 在MVC中使用Viewmodel和datepicker与Dotnet Highchart
我使用的是基于C代码的Dotnet Highchart,C代码具有javascript输出代码。 这几乎就是我的图表的样子: 我使用数据库中的数据,通过使用LINQ查询给出此图表数据 我的实体中有一列Completed Date,我需要使用datepicker创建两个文本框,以便用户可以选择Completed Date的开始日期和结束日期。然后用户应该能够单击submit按钮,然后图表应该更新并显示这两个日期之间的统计信息。我对此有完整的LINQ查询 这是我将要使用的LINQ查询:C# 在MVC中使用Viewmodel和datepicker与Dotnet Highchart,c#,asp.net-mvc,asp.net-mvc-3,charts,highcharts,C#,Asp.net Mvc,Asp.net Mvc 3,Charts,Highcharts,我使用的是基于C代码的Dotnet Highchart,C代码具有javascript输出代码。 这几乎就是我的图表的样子: 我使用数据库中的数据,通过使用LINQ查询给出此图表数据 我的实体中有一列Completed Date,我需要使用datepicker创建两个文本框,以便用户可以选择Completed Date的开始日期和结束日期。然后用户应该能够单击submit按钮,然后图表应该更新并显示这两个日期之间的统计信息。我对此有完整的LINQ查询 这是我将要使用的LINQ查询: publi
public List<CoreValueAndAverageGrade> GetAverageGradeForAllCoreValues(DateTime startDate, DateTime endDate)
{
return db.CoreValue
.Where(coreValue => coreValue.CoreValueQuestion
.Any(coreValueQuestion => coreValueQuestion.SubjectType.Ignored_Statistic == false))
.Select(coreValue => new CoreValueAndAverageGrade
{
CoreValue = coreValue,
AverageGrade = coreValue.CoreValueQuestion
.Where(coreValueQuestion => coreValueQuestion.SubjectType.Ignored_Statistic == false)
.Average(coreValueQuestion => coreValueQuestion.SelectedQuestions
.Where(selectedQuestion => selectedQuestion.GoalCardQuestionAnswer != null
&& selectedQuestion.GoalCardQuestionAnswer.Grade.HasValue
&& selectedQuestion.GoalCard.Completed_Date >= startDate
&& selectedQuestion.GoalCard.Completed_Date <= endDate
)
.Average(selectedQuestion => selectedQuestion.GoalCardQuestionAnswer.Grade.Value))
})
.ToList();
}
在我的GET操作方法中,我有以下代码:
public ActionResult OfficeStatistic()
{
{
OfficeStatisticNKIViewModel model = new OfficeStatisticNKIViewModel();
model.EndDate = DateTime.Now;
model.StartDate = DateTime.Now;
var averageGrades = OfficeStatisticRepository.GetAverageGradeForAllCoreValues(model.StartDate, model.EndDate);
var dataItems = (averageGrades.Select(averageGrade => averageGrade.AverageGrade).ToArray());
Data data = new Data(
dataItems.Select(y => new Point {Color = GetBarColour(y), Y = y}).ToArray());
Highcharts chart1 = new Highcharts("Chart")
.SetXAxis(new XAxis { Categories = averageGrades.Select(averageGrade => averageGrade.CoreValue.Name).ToArray() })
.SetYAxis(new YAxis { Min = 0, Max = 10, TickInterval = 1, Title = new YAxisTitle { Text = "Betygskalan" } })
.SetSeries(new Series { Data = data, Name = "Snittbetyg" })
.SetLegend(new Legend { Enabled = false })
.SetTitle(new Title { Text = "Örebro Statistik", })
.InitChart(new Chart { DefaultSeriesType = ChartTypes.Column });
return View(new Container(new[] { chart1 }));
}
问题是,我不知道如何使用post-action方法,图表需要使用新的统计数据进行更新,我需要某种ajax还是可以在服务器端这样做
非常感谢您提供的任何帮助或提示
提前谢谢 您是想用Javascript异步更新图表,还是只想回发并重新呈现整个页面?我为一个项目做了类似的事情,只是使用了一个局部视图。使用日期选择器并将数据发送回控制器。控制器使用这些结果运行查询,然后重新呈现图形。您是希望使用Javascript异步更新图表,还是只想回发并再次呈现整个页面?我为一个项目做了类似的操作,只是使用了部分视图。使用日期选择器并将数据发送回控制器。控制器使用这些结果运行查询,然后重新呈现图形。
public ActionResult OfficeStatistic()
{
{
OfficeStatisticNKIViewModel model = new OfficeStatisticNKIViewModel();
model.EndDate = DateTime.Now;
model.StartDate = DateTime.Now;
var averageGrades = OfficeStatisticRepository.GetAverageGradeForAllCoreValues(model.StartDate, model.EndDate);
var dataItems = (averageGrades.Select(averageGrade => averageGrade.AverageGrade).ToArray());
Data data = new Data(
dataItems.Select(y => new Point {Color = GetBarColour(y), Y = y}).ToArray());
Highcharts chart1 = new Highcharts("Chart")
.SetXAxis(new XAxis { Categories = averageGrades.Select(averageGrade => averageGrade.CoreValue.Name).ToArray() })
.SetYAxis(new YAxis { Min = 0, Max = 10, TickInterval = 1, Title = new YAxisTitle { Text = "Betygskalan" } })
.SetSeries(new Series { Data = data, Name = "Snittbetyg" })
.SetLegend(new Legend { Enabled = false })
.SetTitle(new Title { Text = "Örebro Statistik", })
.InitChart(new Chart { DefaultSeriesType = ChartTypes.Column });
return View(new Container(new[] { chart1 }));
}