如何使用mvc图表助手选择一个值来显示mvc中图表中员工的值时,如何获得下拉列表?

时间:2017-09-17 07:39:24

标签: asp.net asp.net-mvc charts asp.net-mvc-5 asp.net-mvc-helpers

你好基本上我想要一个下拉列表来显示管理员或管理员使用它时的员工姓名列表,选择图表必须显示的名称。这可能吗?如果是的话请帮助我......

public ActionResult CharterColumn()
{
    var results = (from c in db.Clockcards select c);
    // the employeeid is a foreign key in the clockcards table 
    // i want to get the name from the employee table 
    // and display only that employees hours worked for the months 
    var groupedByMonth = results
        .OrderByDescending(x => x.CaptureDate)
        .GroupBy(x => new { x.CaptureDate.Year, x.CaptureDate.Month }).ToList();

    List<string> monthNames = groupedByMonth
        .Select(a => a.FirstOrDefault().CaptureDate.ToString("MMMM"))
        .ToList();

    List<double> hoursPerMonth = groupedByMonth
        .Select(a => a.Sum(p => p.Hours))
        .ToList();

    ArrayList xValue = new ArrayList(monthNames);
    ArrayList yValue = new ArrayList(hoursPerMonth);

    new Chart(width: 800, height: 400, theme: ChartTheme.Yellow)
        .AddTitle("Chart")
        .AddSeries("Default", chartType: "Column", xValue: xValue, yValues: yValue)
    .Write("bmp");
    return null;

}

这是我的观点

<div>
    <img src= "@Url.Action("CharterColumn")" alt="Chart"/>
</div>

1 个答案:

答案 0 :(得分:0)

您可以在下拉列表中收听change事件,读取所选的选项值(假设它是员工ID)并将其传递给action方法,该方法返回该员工记录的图表数据并更新图片标记的src属性值。

<select id="employeeList">
    <option value="0">None</option>
    <option value="1">1</option>
    <option value="2">2</option>
</select>
<div>
    <img id="chart" data-url="@Url.Action("CharterColumn")" alt="Chart" />
</div>

您可以看到我将html5数据属性设置为图像标记,并使用Url.Action方法将其值设置为操作方法的相对路径。稍后我们将在javascript中读取此值。 / p>

我为SELECT元素编写了HTML的硬编码。您可以根据需要使用Html.DropDownListHtml.DropDownListFor辅助方法使用表格中的员工数据来替换它。

现在,更新您的操作方法以接受员工ID值作为参数

public ActionResult CharterColumn(int employeeId)
{
    //use employeeId to filter the results
    var results = db.Clockcards.Where(s=>s.EmployeeId==employeeId).ToList();
    //your existing code to return the chart
}

现在用于处理更改事件的javascript。

$(document).ready(function () {

    loadChart($("#employeeList").val()); // initial load of the chart with selected option

    $("#employeeList").change(function () {
        var employeeId = $(this).val();
        loadChart(employeeId);
    });

    function loadChart(employeeId) {
        var imgSrc = $("#chart").data("url") + "?employeeId=" + employeeId;
        $("#chart").attr("src", imgSrc);
    }
});

假设您的页面中没有任何其他脚本错误,这应该可以正常工作。