Недавно я работал над небольшим приложением, которое состоит из индексной страницы, содержащей несколько отчетов, запускаемых из базы данных, а затем некоторые формы для обновления содержимого этой страницы, все в ASP.NET используя C#, чтобы узнать, как использовать MSCharts в будущем.Response.Redirect и MSCharts
На индексной странице могут отображаться любые 5 отчетов, которые я установил, которые вы выбрали в раскрывающемся списке. По умолчанию первый выбирается таким образом, чтобы на странице всегда отображалась диаграмма.
Я получил диаграммы и показал, что я хотел, чтобы они были на индексной странице в порядке, и формы для обновления базы данных тоже работали. Однако, когда я нажал кнопку «Выход» на одной из этих страниц (которая отправила пользователя обратно на индексную страницу), диаграмма, которая должна была отображаться там, была просто красной «x», как если бы изображение не было , Если бы я обновил страницу, она появилась так, как должна.
Кнопки «Выход» во время использования Response.Redirect(), чтобы отправить пользователя обратно на индексную страницу, и я потратил некоторое время, подтвердив, что это правильный метод. В конце концов, я попытался переключиться на использование Server.Transfer() вместо этого, несмотря на то, что каждый сайт, похоже, указывает на то, что между ними не было существенной разницы в отношении цикла выполнения страницы - только Response.Redirect() отправил целое новый запрос, а Server.Transfer - нет.
Несмотря на это, использование Server.Transfer() устраняет проблему. Ну, это здорово!
Может ли кто-нибудь объяснить, почему это сработало?
Обновление - Некоторый код, если он вообще помогает.
Одно из событий, о котором идет речь, из форм обновления - изначально используется Response.Redirect(), конечно.
protected void Exit_Click(object sender, EventArgs e)
{
Server.Transfer("Default.aspx");
}
Page_Load из Default.aspx:
protected void Page_Load(object sender, EventArgs e)
{
Report report = new Report(reportList.SelectedIndex);
ChartPanel.Controls.Add(report.Chart);
}
Outline класса Report - это в основном обертка для различных отчетов я, указанных в createChartFromParameters() метод. Он просто выполняет всю работу по настройке диаграммы, чтобы она не попадала в пользовательский интерфейс, а затем позволяет пользовательскому интерфейсу сам взять объект диаграммы. Я могу опубликовать эту версию, если кто-то найдет ее полезной, но она уродливая, как что-то, и действительно довольно длинная, поэтому я бы предпочел.
public class Report
{
private Chart chart { public get; }
public Report(string title, string command, string x, string y, string label, string legend, SeriesChartType type)
public Report(int presetChartNum)
private void createChartFromParameters(string title, string command, string x, string y, string label, string legend, SeriesChartType type, int customcode = 0)
}
Трудно сказать, не глядя на код. Единственное, что я мог догадаться, это то, что Server.Transfer прекращает выполнение и немедленно перенаправляет ответ.redirect завершит выполнение и, возможно, будет запущен какой-то непреднамеренный код, который вызвал проблему – user1231231412
. Я выложу какой-то код только для интереса, но, честно говоря, я не думаю, что могу опубликовать достаточно - чтобы действительно посмотреть, что происходит. d нужно загрузить примерно половину кода приложения, и я действительно не хочу, чтобы кто-то через пытку читал большую часть моего кода: P – Hecksa
** Обновление **: добавлен код. – Hecksa