【发布时间】:2015-05-06 12:35:54
【问题描述】:
我正在尝试在我的网站中创建一个图表模块,客户可以在其中查看他们的数据。我最初创建了一些预设图表(年度、每月)来表示我数据的不同方面,但现在我想更改它,以便用户通过两个 DateTimePickers 动态选择用于填充图表的日期窗口。
我的数据:
public class visitItem
{
public int VisitId { get; set; }
public int ContactId { get; set; }
public int LocationId { get; set; }
public DateTime FirstSeen { get; set; }
public DateTime LastSeen { get; set; }
public double Duration { get; set; }
}
我的控制器中有一个动作方法:
public ActionResult dateGapDuration(DateTime start, DateTime end)
{
//Fetch client data
visits = getList();
//Cut down list to elements within interval.
var Model = visits.Where(x => x.FirstSeen.Ticks > start.Ticks && x.FirstSeen.Ticks < end.Ticks).ToList<visitItem>();
//My generic chart format initialiser.
var chart1 = getChartSetup();
chart1.Width = 1100;
chart1.Height = 500;
//Check Interval Length and apply relevant list grouping (i.e. to avoid displaying every day is interval is 4 years)
if (interval < 60 * TimeSpan.TicksPerDay)
{
var chartList = Model.AsEnumerable().GroupBy(v => v.FirstSeen.Day)
.Select(g => new visitItem
{
FirstSeen = DateTime.Parse(g.Key.ToString()),
Duration = g.Sum(i => i.Duration)
});
}
//Cycle through chartList and populate data points.
//Return image to view...
}
然后图表作为要显示的图像返回。
我以前在局部视图中呈现我的预设图表,然后使用按钮隐藏/显示。部分视图通常看起来像这样,例如:
<div id="annualdur" hidden="hidden">
<img src="@Url.Action("annualDuration", "Analytics", new { year = "2014" })" />
现在我希望图表是可变的:
如何从视图中调用此函数?我的理解是,当 datetimepickers 值发生更改时,为此使用部分视图不会调用该函数,因此我认为我需要另一种方法来执行此操作。
假设上述 1. 的解决方案,是否可以在视图中保留 datetimepicker 的
DateTime,以便在按下Load chart样式按钮时传递给函数?
【问题讨论】:
-
使用 javascript/jquery 处理 datepicker 的
.change()事件(或“更新”按钮的.click()事件)并使用 ajax 调用控制器方法,传递datepickers,并在成功回调中,使用方法返回的部分视图(包含图像)更新 DOM -
感谢您的评论...我了解了如何在环顾四周后使用 .change() 方法,但是使用 ajax 调用控制器方法然后将图像附加到视图是我的事情不知道该怎么做。你能建议一下吗?
-
哦!抱歉,这里只有下午 3 点。谢谢,那太好了。
标签: javascript c# asp.net asp.net-mvc charts