Новый asp.net элементы управления диаграммами - будут ли они работать с MVC (в конечном итоге)?
Скотт ГУ только что опубликовал о новом наборе элементов управления диаграммами, распространяемых командой .NET. Они выглядят невероятно: http://weblogs.asp.net/scottgu/archive/2008/11/24/new-asp-net-charting-control-lt-asp-chart-runat-quot-server-quot-gt.aspx
вопрос на миллион долларов ... будут ли они работать с MVC, и если да, то когда?
6 ответов:
вы можете использовать элементы управления диаграммы двумя способами:
генерация изображения с контроллера
генерируя диаграмму и возвращая ее как изображение из действия (как говорит Чатуман, я думаю):
Chart chart = new Chart(); chart.BackColor = Color.Transparent; chart.Width = Unit.Pixel(250); chart.Height = Unit.Pixel(100); Series series1 = new Series("Series1"); series1.ChartArea = "ca1"; series1.ChartType = SeriesChartType.Pie; series1.Font = new Font("Verdana", 8.25f, FontStyle.Regular); series1.Points.Add(new DataPoint { AxisLabel = "Value1", YValues = new double[] { value1 } }); series1.Points.Add(new DataPoint { AxisLabel = "Value2", YValues = new double[] { value2 } }); chart.Series.Add(series1); ChartArea ca1 = new ChartArea("ca1"); ca1.BackColor = Color.Transparent; chart.ChartAreas.Add(ca1); using (var ms = new MemoryStream()) { chart.SaveImage(ms, ChartImageFormat.Png); ms.Seek(0, SeekOrigin.Begin); return File(ms.ToArray(), "image/png", "mychart.png"); }WebForms Style
таким образом, вы просто включите график .aspx представления (так же, как с традиционными веб-формами). Для этого вам придется подключить соответствующие биты в сеть.конфигурации
<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>вы не можете запускать код внутри элементов DataPoint при построении диаграммы, поэтому для подключения ваших данных вам понадобится метод в классе View. Это работает нормально для меня. При работе таким образом элемент управления отображает URL-адрес изображения, созданного обработчиком http элемента управления chart. В вашем развертывании вам нужно будет предоставить доступную для записи папку для кэширования изображений.
* VS 2010 / .NET 4 Поддержка *
чтобы получить эту работу в .NET 4 необходимо изменить ссылки на диаграмму на версию 4.0.0.0 с помощью соответствующего маркера открытого ключа.
также кажется, что элемент управления chart теперь генерирует URL-адреса для текущего пути запроса, а не маршрута запроса. Для меня это означало, что все запросы диаграммы привели к 404 ошибкам, потому что
/{Controller}/ChartImg.axdи эквиваленты были перекрыты маршруты. Чтобы исправить это, я добавил дополнительные вызовы IgnoreRoute, которые охватывают мои обычаи - более общее решение было бы лучше:public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("ChartImg.axd/{*pathInfo}"); routes.IgnoreRoute("{controller}/ChartImg.axd/{*pathInfo}"); routes.IgnoreRoute("{controller}/{action}/ChartImg.axd/{*pathInfo}"); ...
для людей, которые хотят использовать управление диаграммами с MVC 3 с помощью Razor engine см. следующую ссылку
вместо этого сделайте Usercontrol и дайте ему полный объект диаграммы, и пусть он отобразит его самостоятельно:
<%@ 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); %>имя его график.ascx и поместите его в папку общего вида.
Теперь вы получите все дополнительные html, как изображения карты и т. д. бесплатно.. а также кэширование.
в вашем контроллере:
public ActionResult Chart(){ var c = new Chart(); //... return View(c); }на ваш взгляд:
<% Html.RenderPartial("Chart", Model); %>
эта статья работала лучше всего для меня:
http://www.codecapers.com/post/Build-a-Dashboard-With-Microsoft-Chart-Controls.aspx
не дает ошибок о "объект не установлен на экземпляр объекта" или "идентификатор сеанса был доступен, но поток ответов был сброшен" (не точная формулировка ошибок).
Я не хотел просто отображать их как изображение, потому что если вы делаете детализацию или подсказки или другой щелчок действия на диаграмме, а затем рендеринг как изображение не сохраняет ничего из этого.
ключ для моих потребностей состоял в том, чтобы поместить диаграмму(ы) в модель, передать модель в представление (или частичное представление) и поместить панель asp:в представление и добавить диаграмму(ы) на панель в разметке представления.
кстати, это было с VS.net 2008 и MVC 2 сентября. 3, 2010 (даты было то, что я нашел важным при поиске ответов из-за изменений, которые постоянно происходят с MVC).
Comments