【问题标题】:Microsoft Charting, MVC 3 and RazorMicrosoft Charting、MVC 3 和 Razor
【发布时间】:2011-06-11 19:39:40
【问题描述】:

This topic 相关 我想知道是否有人将Microsoft Charting 库与Asp MVC 3 和Razor 一起使用。

我知道引入的新图表助手,但由于它非常有限,因此不是一个真正的选择。

创建一个返回图像的操作方法也很容易,但是由于所有交互性都被破坏(即使只是条形图中条形的简单工具提示),这种方法有几个限制。

This example 可能是我找到的最有帮助的文章,但我仍然无法让一个简单的图表工作,即使它在仅在操作方法中渲染图像时确实有效。此外,我的样本在 .net 4 下运行良好,但显然那些不是 MVC 样本。

所以 - 有没有人让 Microsoft 图表在带有 Razor 的 Asp MVC 3 中完全工作,并且可以发布一个完整解决方案的链接?

【问题讨论】:

    标签: c# asp.net-mvc charts asp.net-mvc-3 mschart


    【解决方案1】:

    如果它是您正在寻找的工具提示和向下钻取,那么这里是一个示例。我尝试并作为我的魅力。您需要将 ImageMap 与您的图像链接才能具有交互性。

    MVC Charts with Interactivity

    【讨论】:

    • 看起来很有希望,正是我想要的!我暂时将其标记为答案,如果以后遇到任何问题,我会回来。谢谢!
    • 太棒了!稍作调整,它也可以与 MVC3 一起使用。谢谢!
    【解决方案2】:

    我花了几天时间寻找在 MVC 中创建交互式图表的解决方案,但我看到的所有示例都比它们必须的复杂得多。

    Sarath 的答案几乎是完美的,但它保存了两次图像,效率不高。使用 Html.RenderAction() 函数,我们可以一次性完成所有工作,并使其尽可能高效。

    这是我想出的解决方案:

    http://blog.smirne.com/2012/09/creating-interactive-charts-with-aspnet.html

    我还没有看到任何可以一次性完成所有事情的解决方案。最好的部分是它不需要对 web.config 文件进行任何修改。它也不会尝试在 MVC 中使用 ASP.net 控件。它是纯 MVC 技术。

    更新

    这里是要求的代码:

    控制器:

    public ActionResult Chart()
    {
        var chart = buildChart();
        StringBuilder result = new StringBuilder();
        result.Append(getChartImage(chart));
        result.Append(chart.GetHtmlImageMap("ImageMap"));
        return Content(result.ToString());
    }
    

    实用功能:

    private Chart buildChart()
    {
        // Build Chart
        var chart = new Chart();
    
        // Create chart here
        chart.Titles.Add(CreateTitle());
        chart.Legends.Add(CreateLegend());
        chart.ChartAreas.Add(CreateChartArea());
        chart.Series.Add(CreateSeries());
    
        return chart;
    }
    
    private string getChartImage(Chart chart)
    {
        using (var stream = new MemoryStream())
        {
           string img = "<img src='data:image/png;base64,{0}' alt='' usemap='#ImageMap'>";
           chart.SaveImage(stream, ChartImageFormat.Png);
           string encoded = Convert.ToBase64String(stream.ToArray());
           return String.Format(img, encoded);
        }
    }
    

    查看:

    @{ Html.RenderAction("Chart"); }
    

    【讨论】:

    • 您可以将链接中示例中的代码发布到您的答案中吗?
    • 在这里。我希望这会有所帮助!
    【解决方案3】:

    这是一个使用 ASP.NET MVC 2 和 Microsoft Charting Controls 的 CodeProject 完整解决方案:

    这可能和目前一样好(至少我找不到更符合您要求的任何东西),因为 ASP.NET MVC 3 仍然只是 RTM,剃须刀视图引擎也是如此。无论如何,将它从 ASP.NET MVC 2 迁移到 3 并不是什么大问题。将视图引擎切换到 razor 会稍微费点力,但总体概念保持不变。

    我会说“去做”,当您遇到具体问题或有疑问时,请在此处提出。

    更新

    Robert Muehsig 的这篇博文也涵盖了该主题,并且提供了可下载的解决方案。根据您的评论,它看起来更像您真正想要完成的:

    【讨论】:

    • 谢谢,不幸的是,该解决方案是“简单方法”的一个示例,这意味着他们使用简单的 这意味着没有交互性。更多细节在这里:4guysfromrolla.com/articles/081909-1.aspx - 他们称之为“二进制流”,我基本上希望其他两个中的一个能够具有例如显示每个数据点值的工具提示。
    • @Victor:我明白你的意思并更新了我的答案。希望对您有所帮助。
    • 谢谢,这更符合我正在寻找的内容。在为 .net 3.5 和 3.5 图表控件编译时,我可以使其在 VS 2010 中工作,但是我仍然无法将其转换为使用更新版本(Razor 与否)。我可以对其进行转换以使其编译,但运行时仍然会出现很多空引用异常。不过感谢您的更新,除非没有人提供更新解决方案的链接,否则我会将其标记为答案。
    猜你喜欢
    • 2011-04-24
    • 1970-01-01
    • 2013-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-07
    • 2011-04-19
    • 2012-02-01
    相关资源
    最近更新 更多