2013-11-21 4 views
1

EDITION & РЕШЕНИЯ: Потратив несколько часов на этой проблеме, я понял, что Extjs диаграмма метода сохранения выгружает страницы, когда он загружает файл. Поскольку я очищаю переменную сеанса, когда пользователь закрывает страницу, мои переменные сеанса автоматически очищаются. Прошу прощения за неправильный вопрос..net переменные сессии будут удалены после запроса

Теперь неудобно, что этот метод загрузки запускает функцию очистки сеанса, но на моем локальном хосте он отменяется сразу же, пока он не отменяется на сервере.


ORIGINAL ВОПРОС: Я использую ExtJS диаграммы с моим MVC3 проекта. И я пытаюсь сохранить диаграммы, используя их методы сохранения. Диаграмма отправляет данные в «http://svg.sencha.io/» для визуализации и предоставления ответа в соответствии с моим типом запроса.

Чтобы дать пользовательские имена для диаграмм, я написал свой собственный код, чтобы получить изображение svg и преобразовать его в png. Я направил необработанные данные на свой сервер. Он работал хорошо. Я мог бы сохранять изображения в виде png-файлов и давать пользовательские имена. Однако этот запрос очищает мои переменные сеанса. Я думал, что проверка ввода может привести к потере данных сеанса, и я попробовал заголовок [ValidateInput(false)] и Request.Unvalidated.Form["input"]. Каждый результат одинаковый. Я думаю, что это связано с проверкой ввода. Что я должен сделать, чтобы решить проблему сеанса. Я не хочу отключать InputValidation для всех методов. Ниже вы можете найти мои коды.

Сервер C#:

public void imageConverter(int width, int height, string type) 
    { 
     try 
     { 
      string svg = Request.Unvalidated.Form["svg"]; 
      string dateStr = DateTime.Today.ToString("yyyyMMdd"); 

      byte[] bytes = new byte[svg.Length * sizeof(char)]; 
      System.Buffer.BlockCopy(svg.ToCharArray(), 0, bytes, 0, bytes.Length); 

      MagickReadSettings settings = new MagickReadSettings(); 
      settings.Width = width; 
      settings.Height = height; 
      settings.Format = ImageMagick.MagickFormat.Svg; 
      using (MagickImage image = new MagickImage(bytes,settings)) 
      { 
       image.Format = MagickFormat.Png; 
       byte[] data = image.ToByteArray(); 

       Response.ContentType = type; 
       Response.AddHeader("Content-Disposition", "attachment; filename=\"" + dateStr + "\""); 
       Response.BinaryWrite(data); 
       Response.End(); 
      } 
     } 
     catch (Exception ex) 
     { 
     } 
    } 

ExtJS Код:

myButton.on('click', function (button, e, eOpts) { 
     Ext.MessageBox.confirm('Sure?', 'Save as?', function (choice) { 
      if (choice == 'yes') { 
       Ext.draw.engine.ImageExporter.defaultUrl ='/Statistics/imageConverter'; 
       myChart.save({ 
        type: 'image/png' 
       }); 
      } 
     }); 
    }); 

ответ

2

Я не MVC гуру, но у меня есть одна вещь в виду, что может помочь вам (если вы используете сессии на основе печенья) , Но сначала есть еще некоторые открытые вопросы:

Был ли сеанс изменен в хранилище сеансов MVC или что-то изменилось или пропало? Вы сравнили файлы cookie с запросом и ответом?

Если это применимо только к файлам cookie, просто добавьте файлы cookie непосредственно в коллекцию файлов ответов. Вы можете либо создать новые, либо просто скопировать их из запроса в ответ.

// supposed to run in a MVC controller 
foreach (System.Web.HttpCookie c in this.Request.Cookies) 
{ 
    this.Response.Cookies.Add(c); 
} 
+0

@tkcn Итак, это было решение? – sra

+0

нет, я понял, что проблема совершенно другая, и я нашел способ справиться с этим. Спасибо за ваш вклад. – tkcn

Смежные вопросы