【问题标题】:Creating a chart from model. (MS Chart Controls in asp.net mvc3)从模型创建图表。 (asp.net mvc3 中的 MS 图表控件)
【发布时间】:2012-08-11 13:33:33
【问题描述】:

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

只要我加载一个已经创建的图表就可以了,例如:

在我的视野中:

     <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 视图:(以通用图表 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 方法中设置断点并尝试将标题传递给视图时,代码永远不会停止,就好像它从未被调用过一样。

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

谢谢!

【问题讨论】:

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


    【解决方案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);
    }
    

    【讨论】:

    • 谢谢,我会试试看,但为什么它不能与 Viewbag 一起使用?
    • 因为 ViewBag 糟透了 :-) 我从不使用它,也永远不会建议同行开发人员使用它。
    • 啊啊啊!谢谢你,谢谢你,谢谢你!有用!从昨天晚上开始,我就一直在和这个小块作斗争,我从来没有想过这是因为我使用的是 ViewBag! (我倾向于这样做来测试某些东西,我懒得去写模型)再次感谢你!
    • 是的,最终值将由视图和控制器定义(例如;char 类型将来自视图中的下拉列表,并且系列将从数据库中填充,尽管查询也将根据视图中的值形成):)
    猜你喜欢
    • 2012-11-09
    • 1970-01-01
    • 1970-01-01
    • 2011-07-09
    • 1970-01-01
    • 1970-01-01
    • 2013-12-11
    • 2010-10-26
    相关资源
    最近更新 更多