2012-04-04 36 views
12

tôi tạo ra một vcard mà tôi gửi đến các khách hàng sử dụng đoạn mã sau:Response.Write và UpdatePanel

Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}", fileNameOnly)); 
Response.ContentType = "text/x-vcard"; 
Response.ContentEncoding = Encoding.GetEncoding("ISO-8859-1"); 
Response.Write(vCard.ToString()); 
Response.End(); 

Tuy nhiên, tôi cần phải sử dụng vCards trên trang đó có sự kiểm soát bên trong và UpdatePanel. Thật không may, theo Update panel and Response write điều này không hoạt động và gây ra lỗi. Tôi tự hỏi một số cách thay thế để gửi nội dung của vcard/file đến trình duyệt của khách hàng là gì và có hiển thị hộp thoại "mở/lưu" không liên quan đến Response.Write không?

+0

Chỉ khi bạn thực hiện bảng cập nhật để hủy bỏ bản cập nhật ajax và làm bài đầy đủ của trang lỗ. Cách khác là sử dụng một trình xử lý để gửi x-vcard của bạn và điều này là tốt hơn từ tất cả các trường hợp. – Aristos

Trả lời

32

Bạn không thể sử dụng Response.Write trong khi đăng lại không đồng bộ. Dù kiểm soát thực thi mã cần phải được thêm vào như là một PostBackTrigger trong bảng điều khiển cập nhật:

<Triggers>   
    <asp:PostBackTrigger ControlID="Button1" /> 
</Triggers> 

Bạn cũng có thể làm điều đó trong code-behind, nếu bạn thích:

ScriptManager.GetCurrent().RegisterPostBackControl(Button1); 
+1

GetCurrent() sẽ nhận được một đối số có lẽ một điều này sẽ làm việc –

+0

Điều này đã không làm việc cho tôi, nhưng tôi đang sử dụng updatepanels cùng với một modalpopupextender và tôi tự hỏi nếu đó là một vấn đề bổ sung. Tôi chỉ đang cố gắng tải xuống tệp thông thường của máy chủ. – JoeManiaci

1

Response.Write will not work under Asynchronous Events. Đề xuất của tôi là xóa Bảng điều khiển cập nhật trong trường hợp đặc biệt chỉ được sử dụng cho điểm xem VCard.

Cách khác - Đặt điều khiển bên trong Bảng điều khiển cập nhật và khởi tạo giá trị của nó dưới sự kiện không đồng bộ. Bây giờ nó sẽ hoạt động.

1

Tại sao bạn không xem xét việc sử dụng một trình xử lý/trang riêng để phục vụ vcard?

Đây có lẽ là cách dễ nhất và rõ ràng hơn để thực hiện việc đó và không can thiệp vào bất kỳ bản postback nào khác (không đồng bộ hoặc không) liên quan đến updatepanel.

1

Tôi gặp sự cố tương tự với Response.Write. Tôi tìm thấy một giải pháp hoặc thậm chí có thể là một giải pháp cho vấn đề này. Chụp TextWriter được gán cho điều khiển máy chủ RenderBeginTag và ghi vào đó.

Tôi viết blog với một ví dụ ở đây: http://timscyclingblog.wordpress.com/2013/03/07/asp-net-web-forms-response-write-in-an-updatepanel-dev-web/

+1

Đây là một câu trả lời cho câu hỏi về mặt kỹ thuật, nhưng nó đã đáp xuống LQP vì vậy nó có thể bị xóa bởi những người đánh giá kích hoạt. Cân nhắc bao gồm một số bài đăng trên blog của bạn trong câu trả lời này. –

Các vấn đề liên quan