0

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

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

在我的视野中:

     <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 视图:(本微软教程 使用的通用图表作为示例)

@{
// 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 方法中设置断点时,我尝试将标题传递给视图,代码永远不会停止,就好像它永远不会被调用一样。

我的问题是:我怎样才能使这项工作?如何将数据从视图传递到动作到另一个视图。

谢谢!

4

1 回答 1

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);
}
于 2012-08-15T08:37:06.650 回答