2010-01-09 2 views
1

я этоКак отредактировать поток ответов с помощью jquery?

MemoryStream export = new MemoryStream(); 
    iCalendarSerializer serializer = new iCalendarSerializer(iCal); 
    serializer.Serialize(export,System.Text.Encoding.UTF8); 
    return export; 

так я использую C# DDay.iCal библиотеку для экспорта своих календарей. Сериализация принимает «поток», поэтому я передал ему поток памяти.

У меня теперь есть общий обработчик, который вызывает метод, содержащий вышеуказанный код.

public class CalendarHandler : IHttpHandler 
    { 
     private Calendar service; 
     private Membership membershipS; 

     public void ProcessRequest(HttpContext context) 
     { 
      service = new Calendar(); 
      membershipS = new Membership (null); 
      string userName = context.User.Identity.Name; 
      Guid userId = membershipS.GetUsersId(userName); 

      context.Response.ContentType = "text/calendar"; 
      // calls the export calendar(the code that showed above that uses dDay ical. 
      var t = service.ExportCalendar(userId); 

      t.WriteTo(context.Response.OutputStream); 

     } 

     public bool IsReusable 
     { 
      get 
      { 
       return false; 
      } 
     } 
    } 

Итак, теперь я написал icalendar для выходного потока. Теперь у меня есть jquery-сообщение, которое идет на этот метод, и теперь я не уверен, как взять результат OutputStream, который получит сообщение jquery, и сделать его всплывающим окном с диалоговым окном сохранения.

$('#ExportCalendar').click(function(e) 
{ 
    $.post('../Models/CalendarHandler.ashx', null, function(r) 
    { 

    }); 

    return false; 
}); 

ответ

1

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

Попробуйте изменить ссылку, чтобы быть регулярной связи (без AJAX), такие как:

<a href="CalendarHandler.ashx">Save Calendar</a> 

Вы также хотите, чтобы установить содержание заголовка распоряжения, чтобы получить хороший файл сохранить диалог. Смотрите эту ссылку для получения дополнительной информации:

http://www.hanselman.com/blog/TheContentDispositionSagaControllingTheSuggestedFileNameInTheBrowsersSaveAsDialog.aspx

+0

@Eilon +1 Вы правы в этой ситуации. Я построил небольшую библиотеку JS/Flash, которая * разрешает это, но она предназначена для использования как для генерации *, так и для сохранения файла на стороне клиента. Не создавайте файл на сервере, а затем сохраняйте его на клиенте: http://downloadify.info –

0

Вы не можете сделать файловое диалоговое всплывающее окно с помощью AJAX. Однако вы можете сделать:

document.location = yourRequestUrl 

и это приведет к созданию диалога. Если вам действительно нужно это сообщение, используйте

$(this).parent("form").submit() 

как ваш обработчик кликов.

Обязательно установите для контекста context.Response.ContentType значение "text/ical". Это говорит браузеру, что делать с ответом.

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