2012-06-27 34 views
47

Tôi có chế độ xem lưới trên trang của mình và tôi muốn xuất nó sang Trang tính Excel, Dưới đây là mã tôi đã viết để thực hiện tác vụ này , ở đây tôi đã đi qua các số liệu để phương pháp này để ràng buộc lưới và btnExcelExport là nút đó sẽ xuất khẩu nội dung grid trong sang Excel Sheet: -Sys.WebForms.PageRequestManagerParserErrorException: Thông báo nhận được từ máy chủ không thể được phân tích cú pháp

private void BindGridView(DataSet ds) 
{ 
    if (ds.Tables.Count > 0) 
    { 
     if (ds.Tables[0].Rows.Count > 0) 
     { 
      GVUserReport.DataSource = ds; 
      GVUserReport.DataBind(); 
      btnExcelExport.Visible = true; 
     } 
    } 
} 

protected void btnExcelExport_Click(object sender, EventArgs e) 
{ 
    Response.Clear(); 
    Response.AddHeader("content-disposition","attachment;filename=FileName.xls"); 
    Response.Charset = ""; 
    Response.Cache.SetCacheability(HttpCacheability.NoCache); 
    Response.ContentType = "application/vnd.xls"; 
    System.IO.StringWriter stringWrite = new System.IO.StringWriter(); 
    System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite); 
    GVUserReport.RenderControl(htmlWrite); 
    Response.Write(stringWrite.ToString()); 
    Response.End(); 
} 

public override void VerifyRenderingInServerForm(Control control) 
{ 
    return; 
} 

Bây giờ khi tôi đang gỡ lỗi tôi thấy rằng lưới là được liên kết thành công nhưng khi cố gắng xuất sang Excel, tôi nhận được lỗi này:

"Microsoft JScript runtime error: Sys.WebForms.PageRequestManagerParserErrorException: The message received from the server could not be parsed."

Trả lời

110

Tôi đã khắc phục sự cố này. Như tôi đang sử dụng UpdatePanel, tôi đã thêm bên dưới mã trong sự kiện Page_Load trang và nó làm việc cho tôi:

protected void Page_Load(object sender, EventArgs e) { 
    ScriptManager scriptManager = ScriptManager.GetCurrent(this.Page); 
    scriptManager.RegisterPostBackControl(this.btnExcelExport); 
    //Further code goes here.... 
} 
+1

gì nếu người quản lý kịch bản là ở trang chủ? –

+0

@ShivaPareek nó sẽ hoạt động theo bất kỳ cách nào, nhưng nếu nó không đặt một ScriptManagerProxy và sử dụng nó! – Peter

+0

Tôi đã sử dụng phương pháp này và toàn bộ trang đang tải lại. IsPostBackProperty = false mà kết quả trong không bắn sự kiện cho xuất khẩu? Điều gì có thể là vấn đề? –

2

Thêm này để bạn PageLoad và nó sẽ giải quyết vấn đề của bạn:

ScriptManager scriptManager = ScriptManager.GetCurrent(this.Page); 
scriptManager.RegisterPostBackControl(this.lblbtndoc1); 
14

Trong trường hợp của tôi, vấn đề là do một số câu trả lời .Write tại Trang chính của trang web (mã phía sau). Họ chỉ có cho mục đích gỡ lỗi (mà không phải là cách tốt nhất, tôi biết) ...

+0

có cùng một vấn đề .. một số phản ứng gỡ lỗi viết dừng cập nhật các thành phố thả xuống sau khi quốc gia được chọn. – Shaakir

2

tôi đã có lỗi tương tự, sau đó tôi đã cố gắng <asp:PostBackTrigger ControlID="xyz"/> thay vì AsyncPostBackTrigger .Đây làm việc cho tôi. Đó là bởi vì chúng tôi không muốn một phần postback.

3

1- Không bao giờ sử dụng Response.Write.

2- Tôi đặt mã bên dưới sau khi tạo (không phải trong Page_Load) một LinkButton (tự động) và giải quyết vấn đề của tôi:

ScriptManager scriptManager = ScriptManager.GetCurrent(this.Page); 
scriptManager.RegisterPostBackControl(lblbtndoc1); 
+0

Tôi cho rằng cách tiếp cận tốt hơn để viết phản hồi đặc biệt sẽ là cho phép theo dõi trên trang bạn muốn gỡ lỗi và sử dụng Trace.Write. –

0

This làm việc cho tôi quá, nhưng với một sự bổ sung (dưới đây).

protected void Page_Load(object sender, EventArgs e) { 
    ScriptManager scriptManager = ScriptManager.GetCurrent(this.Page); 
    scriptManager.RegisterPostBackControl(this.btnExcelExport); 
    //Further code goes here.... 
} 

Tôi đã đăng ký tập lệnh trên nút của mình để nhấp vào nút khác sau khi sự kiện của nó được xử lý xong. Để nó hoạt động được, tôi phải gỡ bỏ nút khác từ Update Panel (chỉ trong trường hợp ai đó đối mặt với cùng một vấn đề).

2

tôi thêm điều khiển để các Triggers thẻ trong bảng cập nhật:

</ContentTemplate> 
    <Triggers> 
     <asp:PostBackTrigger ControlID="exportLinkButton" /> 
    </Triggers> 
</asp:UpdatePanel> 

Bằng cách này, exportLinkButton sẽ kích hoạt UpdatePanel để cập nhật.
Thông tin thêm here.

3

Đối với VB.Net Bạn bè của tôi -

Dim scriptManager As ScriptManager = scriptManager.GetCurrent(Me.Page) 
scriptManager.RegisterPostBackControl(Me.YourButtonNameHere) 
Các vấn đề liên quan