Отображение элементов управления ASP.NET Chart на сайте ASP.NET MVC с виртуальным путем - PullRequest
2 голосов
/ 17 февраля 2010

У меня есть простой проект, который сочетает в себе ASP.NET MVC с контролем ASP.NET Charts.Код очень прост и работает, ЕСЛИ я не указываю какой-либо «Виртуальный путь» при запуске его в VS 2008. Я следовал за постом Майка Черански в его блоге здесь:путь (на вкладке «Веб» в свойствах проекта) произойдет сбой и возникнет эта ошибка: не удалось сопоставить путь «/ChartImg.axd».Таким образом, кажется, что он все еще пытается вызвать ChartImg.axd в корневом каталоге, а не внутри виртуального пути.

Итак, мой вопрос - как мне заставить его перейти на виртуальный путь вместо этого?

Я также сделал, когда действие контроллера просто возвращает поток файлов изображения - что я не делаюхочу - поскольку в конечном итоге я хочу сделать диаграмму кликабельной вместо простого изображения.

Вот мои настройки web.config, относящиеся к диаграмме ASP.NET:

<appSettings>
    <add key="ChartImageHandler" value="storage=file;timeout=20;URL=/App_Data/MicrosoftChartControls/"/>
</appSettings>

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

Код для контроллера:

public ActionResult Index() {
    ViewData["Message"] = "Welcome to ASP.NET MVC!";
    ViewData["Chart"] = BindChartData();
    return View();
}

private Chart BindChartData() {
    Chart chart = new Chart();
    chart.Width = 150;
    chart.Height = 300;
    chart.Attributes.Add("align", "left");            

    chart.Titles.Add("MY CHART");  
    chart.ChartAreas.Add(new ChartArea());

    chart.Series.Add(new Series());
    chart.Legends.Add(new Legend("MY CHART"));
    chart.Legends[0].TableStyle = LegendTableStyle.Auto;
    chart.Legends[0].Docking = Docking.Bottom;

    for (int i = 0; i < 10; i++) {
        string x = ChartTest.Models.Utility.RandomText();
        decimal y = ChartTest.Models.Utility.RandomNumber(1, 100);
        int ptIdx = chart.Series[0].Points.AddXY(x, y);
        DataPoint pt = chart.Series[0].Points[ptIdx];
        pt.LegendText = "#VALX: #VALY";
    }

    chart.Series[0].Legend = "MY CHART";
    return chart;
}

Код для aspx:

<%         
    supportChart.Controls.Add(ViewData["Chart"] as Chart);        
%>
<asp:Panel ID="supportChart" runat="server"></asp:Panel>

Ответы [ 2 ]

1 голос
/ 21 июня 2010

Чтобы получить путь, который нужно игнорировать, необходимо добавить определенный путь к IgnoreRoute.

routes.IgnoreRoute("VirtualPath/{resource}.axd/{*pathInfo}");

Я также смог заставить его работать в моем конкретном случае, используя:

routes.IgnoreRoute("{controller}/{action}/{resource}.axd/{*pathInfo}");
0 голосов
/ 17 февраля 2010

Я не эксперт по маршрутизации, но вам может понадобиться что-то подобное в вашем global.asax:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...