asp.net Chart Управление пользовательским элементом управления в MVC - PullRequest
1 голос
/ 26 августа 2009

Я новичок в MVC Framework. Я работаю над проектом приборной панели в рамках MVC. Проект состоит из набора элементов управления диаграммами в пользовательских элементах управления, содержащихся на главной странице. Я провел тест на элементе управления диаграммой на странице aspx ... и он работает ... но когда я переместил код в ascx (usercontrol), диаграмма не отображается. Есть идеи?!?!?! ... Я застрял. Заранее спасибо

Джеф

Код в .aspx

 <%
  System.Web.UI.DataVisualization.Charting.Chart Chart1 = new System.Web.UI.DataVisualization.Charting.Chart();
  Chart1.Width = 450;
  Chart1.Height = 296;
  Chart1.RenderType = RenderType.ImageTag;
  Chart1.ImageLocation = "..\\..\\TempImages\\ChartPic_#SEQ(200,30)";

  Chart1.Palette = ChartColorPalette.BrightPastel;
                    Title t = new Title("Program Pipeline", Docking.Top, new System.Drawing.Font("Trebuchet MS", 14, System.Drawing.FontStyle.Bold), System.Drawing.Color.FromArgb(26, 59, 105));
                    Chart1.Titles.Add(t);
                    Chart1.ChartAreas.Add("Prog 1");

  // create a couple of series
                    Chart1.Series.Add("Backlog");
                    Chart1.Series.Add("Constructed");
                    Chart1.Series.Add("Billed");
                    Chart1.Series.Add("BudgetUsed");
                    Chart1.Series.Add("Total");



                    Chart1.Series["Backlog"].ChartType = SeriesChartType.StackedBar100;
                    Chart1.Series["Constructed"].ChartType = SeriesChartType.StackedBar100;
                    Chart1.Series["Billed"].ChartType = SeriesChartType.StackedBar100;
                    Chart1.Series["Total"].ChartType = SeriesChartType.StackedBar100;
                    Chart1.Series["BudgetUsed"].ChartType = SeriesChartType.StackedBar100;

                    Chart1.Series["Backlog"]["DrawingStyle"] = "Cylinder";
                    Chart1.Series["Constructed"]["DrawingStyle"] = "Cylinder";
                    Chart1.Series["Billed"]["DrawingStyle"] = "Cylinder";
                    Chart1.Series["BudgetUsed"]["DrawingStyle"] = "Cylinder";
                    Chart1.Series["Total"]["DrawingStyle"] = "Cylinder";


                    // Bar Size
                    Chart1.Series["Backlog"]["PointWidth"] = "0.6";
                    Chart1.Series["Constructed"]["PointWidth"] = "0.6";
                    Chart1.Series["Billed"]["PointWidth"] = "0.6";
                    Chart1.Series["BudgetUsed"]["PointWidth"] = "0.6";
                    Chart1.Series["Total"]["PointWidth"] = "0.6";




                    int _total = 0;
                    int _newTotalAmt = 100 - _total;
                    foreach (MvcApplication1.Models.Amount obj in Model.GetTotalAmt("plm1"))
                    {
                        _total += obj.TotalAmount;

                        Chart1.Series[obj.PLMType].Points.AddY(obj.TotalAmount);
                    }
                    Chart1.Series["BudgetUsed"].Points.AddY(0);
                    Chart1.Series["Total"].Points.AddY(_newTotalAmt);



                    _total = 0;
                    _newTotalAmt = 100 - _total;
                    foreach (MvcApplication1.Models.Amount obj in Model.GetTotalAmtForPLM2("plm2"))
                    {
                        _total += obj.TotalAmount;

                        Chart1.Series[obj.PLMType].Points.AddY(obj.TotalAmount);
                    }
                    Chart1.Series["BudgetUsed"].Points.AddY(0);
                    Chart1.Series["Total"].Points.AddY(_newTotalAmt);




                    _total = 0;
                    _newTotalAmt = 100 - _total;
                    foreach (MvcApplication1.Models.Amount obj in Model.GetTotalAmt("plm3"))
                    {
                        _total += obj.TotalAmount;

                        Chart1.Series[obj.PLMType].Points.AddY(obj.TotalAmount);
                    }
                    Chart1.Series["BudgetUsed"].Points.AddY(0);
                    Chart1.Series["Total"].Points.AddY(_newTotalAmt);



                  // MvcApplication1.Models.TotalPOAmount oTotal = Model.GetOverAllBudget();



                    // add points to series 3
                    Chart1.Series["Billed"].Points.AddY(0);
                    Chart1.Series["Constructed"].Points.AddY(0);
                    Chart1.Series["Backlog"].Points.AddY(0);
                    Chart1.Series["BudgetUsed"].Points.AddY(39);
                    Chart1.Series["Total"].Points.AddY(100);



  Chart1.BorderSkin.SkinStyle = BorderSkinStyle.Emboss;
  Chart1.BorderColor = System.Drawing.Color.FromArgb(26, 59, 105);
                    Chart1.BorderlineDashStyle = ChartDashStyle.Solid;
  Chart1.BorderWidth = 2;

                    Chart1.Legends.Add("Legend");

      // show legend based on check box value
                  //  Chart1.Legends["Legend1"].Enabled = ShowLegend.Checked;

  // Render chart control
  Chart1.Page = this;
  HtmlTextWriter writer = new HtmlTextWriter(Page.Response.Output);
  Chart1.RenderControl(writer);


                    //IList<SelectListItem> list = new List<SelectListItem>();
                    //SelectListItem sli = new SelectListItem();
                    //sli.Text = "test1";
                    //sli.Value = "1";

                    //list.Add(sli);
                    //ViewData["Test"] = list;


                 %>

Ответы [ 2 ]

1 голос
/ 19 ноября 2009

Я просто пытался обойти то, что кажется той же проблемой. Когда я переместил код (аналогично вашему выше) в UserControl, пространство имен System.Web.UI.DataVisualization не было распознано, и я получил ошибку:

Тип или имя пространства имен «DataVisualization» не существует в пространство имен 'System.Web.UI' (вы отсутствует ссылка на сборку?)

Пространство имен, казалось, распознавалось только тогда, когда код диаграммы лежал внутри элемента управления asp (на странице aspx он находился внутри элемента управления ). Поэтому я поместил код диаграммы в элемент управления , и он заработал.

1 голос
/ 02 сентября 2009

У меня была точно такая же проблема. Моя проблема была связана с путями к файлу изображения. Элемент управления диаграммы неправильно понял, когда помещен в пользовательский элемент управления. Если я изменил диаграмму, чтобы использовать Imagestoragemode из HttpHandler, то он работал как положено.

к сожалению, это лишило меня возможности проводить юнит-тестирование моих представлений. В конце я поместил элемент управления диаграммы на страницу aspx, а затем использовал jQuery, чтобы загрузить его при необходимости. (К счастью, моя страница панели инструментов использовала JavaScript для загрузки содержимого портлетов)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...