新的asp.net图表控件-它们最终会与MVC一起工作吗?

新的asp.net图表控件-它们最终会与MVC一起工作吗?,.net,asp.net,asp.net-mvc,charts,.net,Asp.net,Asp.net Mvc,Charts,Scott Gu刚刚发布了一组由.NET团队发布的新图表控件。它们看起来不可思议: 百万美元的问题是。。。它们会与MVC一起工作吗?如果是,什么时候?您已经可以将它们与MVC一起使用了。您所要做的就是将它们呈现为图像。您可以通过两种方式使用图表控件: 从控制器生成图像 通过生成图表并将其作为动作的图像返回(我认为Chatuman指的是): WebForms样式 通过这种方式,您只需在.aspx视图中包含图表(就像传统的web表单一样)。为此,您必须在web.config中连接相关位 <co

Scott Gu刚刚发布了一组由.NET团队发布的新图表控件。它们看起来不可思议:


百万美元的问题是。。。它们会与MVC一起工作吗?如果是,什么时候?

您已经可以将它们与MVC一起使用了。您所要做的就是将它们呈现为图像。

您可以通过两种方式使用图表控件:

从控制器生成图像

通过生成图表并将其作为动作的图像返回(我认为Chatuman指的是):

WebForms样式

通过这种方式,您只需在.aspx视图中包含图表(就像传统的web表单一样)。为此,您必须在web.config中连接相关位

<controls>
    ...
    <add tagPrefix="asp"
         namespace="System.Web.UI.DataVisualization.Charting"
         assembly="System.Web.DataVisualization, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</controls>

<httpHandlers>
    ...
    <add path="ChartImg.axd"
         verb="GET,HEAD"
         validate="false"
         type="System.Web.UI.DataVisualization.Charting.ChartHttpHandler, System.Web.DataVisualization, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
</httpHandlers>

<handlers>
    ...
    <add name="ChartImageHandler"
         preCondition="integratedMode" 
         verb="GET,HEAD"
         path="ChartImg.axd"
         type="System.Web.UI.DataVisualization.Charting.ChartHttpHandler, System.Web.DataVisualization, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</handlers>

我一直在使用MVC进行测试,到目前为止,它似乎正在使用MVC。

制作一个用户控件,将完整的图表对象提供给它,让它自己呈现:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<System.Web.UI.DataVisualization.Charting.Chart>" %>
<%
    Model.Page = this.Page;
    var writer = new HtmlTextWriter(Page.Response.Output);
    Model.RenderControl(writer);
%>
在你看来:

<% Html.RenderPartial("Chart", Model); %>

这篇文章最适合我:

不会给出关于“对象未设置为对象实例”或“会话id可用但响应流已刷新”的错误(不是错误的确切措辞)

我不愿意只将它们渲染为图像,因为如果在图表上执行深入查看、工具提示或其他单击操作,那么渲染为图像不会保留任何内容

我需要的关键是将图表放入模型中,将模型传递给视图(或局部视图),在视图中放入asp:面板,并将图表添加到视图标记中的面板中


顺便说一下,这是VS.net 2008和MVC 2于2010年9月3日发布的版本(日期是我在搜索答案时发现的重要内容,因为MVC不断发生变化)。

对于希望使用Razor引擎将图表控件与MVC 3结合使用的用户,请参见以下链接


+1-不错。2个小改动:
MemoryStream ms=new MemoryStream()
应该位于
使用
块中,MVC控制器有用于返回文件的助手方法-而不是
new FileStreamResult
您可以执行
返回文件(ms.ToArray(),“image/png”,“mychart.png”)
添加了在.NET 4中实现此功能的信息-我花了很长时间才弄清楚路由问题!我刚刚在我的博客上发布了一个更新版的.NET4.0图表示例,并加入了另外两个项目——ChartsWithMVC和ChartsWithoutWebForms,它们基本上都将图表呈现为图像并返回。有没有其他方法可以让我使用Microsoft图表交互和ajax支持?。我正在使用MVC4附加信息来帮助某人:如果您的图表在某个区域内,则需要将忽略(context.Routes.Ignore({controller}/{action}/ChartImg.axd/{*pathInfo})))添加到RegisterArea方法中,以避免使用此方法之前从未见过的大量错误,第一个问题是执行ChartImg.axd的子请求时出现
错误。
-您能提供帮助吗?用户建议将
添加到
部分下的web.config中,但是这会导致另一个错误
会话状态已创建会话id,但无法保存它,因为应用程序已刷新响应。
-在您的实现中也发生过这种情况吗?是否使用.NET 4.0或3.5?如果您使用3.5,您必须按照建议将内容添加到web.config。如果您使用.NET 4.0,请添加以下内容:是的,谢谢Carl!在MVC4和NET4.5VS2012中为我工作。生成web.config元素的简单方法是使用解决方案资源管理器向MVC4项目添加一个新的WebForm.aspx项;然后从工具箱中将图表控件拖到aspx设计图面上。并且,在App_Start/RouteConfig.cs中,添加忽略路由的代码,如Simon Steele所示。
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<System.Web.UI.DataVisualization.Charting.Chart>" %>
<%
    Model.Page = this.Page;
    var writer = new HtmlTextWriter(Page.Response.Output);
    Model.RenderControl(writer);
%>
public ActionResult Chart(){
 var c = new Chart();
 //...
 return View(c);
}
<% Html.RenderPartial("Chart", Model); %>