C# 如何使用jquery呈现响应流?

C# 如何使用jquery呈现响应流?,c#,asp.net,jquery,C#,Asp.net,Jquery,我有这个 MemoryStream export = new MemoryStream(); iCalendarSerializer serializer = new iCalendarSerializer(iCal); serializer.Serialize(export,System.Text.Encoding.UTF8); return export; 因此,我使用C#DDay.iCal库导出日历。Serialize接收一个“流”,所以我给它传递了一个内

我有这个

    MemoryStream export = new MemoryStream();
    iCalendarSerializer serializer = new iCalendarSerializer(iCal);
    serializer.Serialize(export,System.Text.Encoding.UTF8);
    return export;
因此,我使用C#DDay.iCal库导出日历。Serialize接收一个“流”,所以我给它传递了一个内存流

我现在有一个通用处理程序,它调用包含上述代码的方法

 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写入输出流。现在我有一个jquerypost,它使用这个方法,现在我不确定如何获取jquerypost将获得的OutputStream结果,并使其弹出一个保存对话框

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

    });

    return false;
});

我不认为AJAX帖子会导致出现文件保存对话框。这是因为AJAX帖子是用于以编程方式发出web请求的,并且是在幕后进行的(也就是说,在用户不知情的情况下)

尝试将链接更改为常规(非AJAX)链接,例如:

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

您还需要设置contentdispositionheader以获得nicefilesave对话框。有关更多信息,请参阅此链接:


我认为AJAX帖子不会导致出现文件保存对话框。这是因为AJAX帖子是用于以编程方式发出web请求的,并且是在幕后进行的(也就是说,在用户不知情的情况下)

尝试将链接更改为常规(非AJAX)链接,例如:

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

您还需要设置contentdispositionheader以获得nicefilesave对话框。有关更多信息,请参阅此链接:


不能通过ajax弹出文件对话框。但是,您可以执行以下操作:

document.location = yourRequestUrl
这将生成一个对话框。如果你真的需要它成为一个帖子,使用

$(this).parent("form").submit()
作为您的单击处理程序


确保将context.Response.ContentType设置为“text/ical”。这将告诉浏览器如何处理响应。

您不能通过ajax弹出文件对话框。但是,您可以执行以下操作:

document.location = yourRequestUrl
这将生成一个对话框。如果你真的需要它成为一个帖子,使用

$(this).parent("form").submit()
作为您的单击处理程序


确保将context.Response.ContentType设置为“text/ical”。这将告诉浏览器如何处理响应。

@Eilon+1您在这种情况下是正确的。我构建了一个小的JS/Flash库,允许这样做,但它用于在客户端生成和保存文件。不在服务器上生成文件,然后将其保存在客户端:@Eilon+1您对这种情况是正确的。我构建了一个小的JS/Flash库,允许这样做,但它用于在客户端生成和保存文件。不在服务器上生成文件,然后将其保存到客户端: