0

GridView クラスから派生したコントロールがあります。BottomPagerRow は常に表示されます。InitializePager をオーバーライドして、UpdatePanel 内に UpdatePanel と LinkBut​​ton (データを変換する関数へのクリック イベント ポイント) を追加しました。

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 ブラウザーに次のクライアント側の例外が表示されます。

Uncaught Sys.WebForms.PageRequestManagerParserErrorException: Sys.WebForms.PageRequestManagerParserErrorException: サーバーから受信したメッセージを解析できませんでした。

私の理解では、これは DownloadExcelFile() で Response.Write を使用しているためだと思います。ただし、このリンクによると、 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を使用しています。誰かがこの例外を回避する方法について意見を持っているなら、私はそれを感謝します. コントロールのライフサイクルの間違った部分にトリガーを追加しているのか、リンクされた記事の要点を完全に見逃しているのかわかりません。ありがとう。

4

0 に答える 0