导出到从GridView派生的Excel控件

时间:2012-08-17 15:32:43

标签: c# asp.net

我有一个从GridView类派生的控件。 BottomPagerRow始终可见。重写InitializePager,我在UpdatePanel中添加了一个UpdatePanel和一个LinkBut​​ton(Click事件指向转换数据的函数)。

var download = new LinkButton { Text = "Open in Excel", CssClass = "fakeButton", ID = "DownloadToExcel" };
download.Click += DownloadExcelFile;
var up = new UpdatePanel() { ID = "ExcelUpdatePanel" };
var trigger = new PostBackTrigger { ControlID = download.ID };
up.Triggers.Add(trigger);
up.ContentTemplateContainer.Controls.Add(download);
row.Cells[0].Controls.Add(up);

当我使用控件在页面中单击LinkBut​​ton时,我在Web浏览器中看到以下客户端异常,

  

未捕获的Sys.WebForms.PageRequestManagerParserErrorException:   Sys.WebForms.PageRequestManagerParserErrorException:消息   从服务器收到的邮件无法解析。

根据我的理解,我认为这是因为我在DownloadExcelFile()中使用Response.Write。但是,根据这个link,我认为添加PostBackTrigger会避免这种情况。我还用

替换了InitializePager事件中的PostBackTrigger生成
ScriptManager.GetCurrent(Page).RegisterPostBackControl(download);

然而,结果保持不变,有时它有效,有时我看到异常。在类似于以下内容的页面中可以看到该异常:

<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master"
    AutoEventWireup="true" CodeBehind="somePage.aspx.cs" Inherits="somePage" %>
<asp:Content ID="SomeContent" ContentPlaceHolderID="MainContent" runat="server">
    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>
            Some other junk...
        </ContentTemplate>
    </asp:UpdatePanel>
    <asp:UpdatePanel runat="server" ID="SomePanel" UpdateMode="Conditional">
        <ContentTemplate>
            <asp:CustomGridView ID="SomeCustomGridView" runat="server" AutoGenerateColumns="False"
                DataSourceID="SomeSqlDataSource" AllowPaging="True" AllowSorting="True">
                <Columns>
                    <asp:BoundField DataField="SomeField" />
                </Columns>
            </asp:CustomGridView>
            <asp:SqlDataSource ID="SomeSqlDataSource" runat="server" ConnectionString="<%$ ConnectionStrings:SomeConnectionString %>"
                SelectCommand="<%$ Resources: SomeResource, Query %>">
                <SelectParameters>
                    <asp:QueryStringParameter Name="SomeId" QueryStringField="SomeId" />
                </SelectParameters>
            </asp:SqlDataSource>
        </ContentTemplate>
    </asp:UpdatePanel>
</asp:Content>

此子页面使用的母版页包含ToolkitScriptManager。我正在使用.NET Framework 4.如果有人有关于如何避免此异常的输入,我将不胜感激。不确定我是否在控件生命周期的错误部分添加了触发器,或者完全错过了链接文章的要点。感谢。

0 个答案:

没有答案