从模型创建图表。 (asp.net mvc3中的MS图表控件)

时间:2012-08-15 08:30:41

标签: asp.net-mvc-3 redirecttoaction microsoft-chart-controls

我正在尝试在视图中创建图表,内容(名称/系列/类型等)将全部由用户在视图中选择的控件确定。

只要我加载已经创建的图表,一切都很好,例如:

在我的观点中:

     <controls above my graph>

  <img src="@Url.Action("StatusGraph")"/>

     <controls below my graph>

控制器内部

    //Creates status graph as specified by the controls in parent partial view or using          defaults
     public ActionResult StatusGraph(){
         return View();
     }

最后是StatusGraph View :(通用图表this microsoft tutorial用作示例)

@{
// TODO: use the data from the model to draw a chart

var myChart = new Chart(width: 600, height: 400)
    .AddTitle("Chart title")
    .AddSeries(
        name: "Employee",
        xValue: new[] {  "Peter", "Andrew", "Julie", "Mary", "Dave" },
        yValues: new[] { "2", "6", "4", "5", "3" })
    .Write();
  }

正如我所说的那样工作得很完美,实际上在父视图中呈现图表而不是在它自己的单独窗口中(实际上是微软,为什么?),但是只要我尝试扩展StatusGraph方法来接受参数(只是图表标题开头)并将其传递给StatusGraph当浏览器尝试加载图片时,我收到404错误。

当我在扩展的StatusGraph方法中设置断点时,我尝试将标题传递给视图,代码永远不会停止,就像从未调用过一样。

我的问题是:我怎样才能做到这一点?如何将视图中的数据传递到另一个视图的操作。

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以/应该使用视图模型:

public class MyViewModel
{
    public string Title { get; set; }
}

然后:

public ActionResult StatusGraph(MyViewModel model)
{
    return View(model);
}

最后:

@model MyViewModel
@{
    var myChart = new Chart(width: 600, height: 400)
        .AddTitle(Model.Title)
        .AddSeries(
            name: "Employee",
            xValue: new[] {  "Peter", "Andrew", "Julie", "Mary", "Dave" },
            yValues: new[] { "2", "6", "4", "5", "3" })
        .Write();
}

并且在渲染图表时传递值:

<img src="@Url.Action("StatusGraph", new { title = "Chart title" })"/>

当然,也可以在控制器操作中定义值,而不是将它们作为参数传递给img源:

public ActionResult StatusGraph()
{
    var model = new MyViewModel
    {
        // TODO: could come from a database or something
        Title = "Chart title"
    };
    return View(model);
}