1

こんにちは、アプリケーションでRadGridを使用しています。RadGridを更新しないようにしたいので、次のように更新パネルにRadGridを配置しました。

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Always">
            <Triggers>
            <asp:AsyncPostBackTrigger ControlID="RadGrid1" EventName="ItemCommand" />
                <%--<asp:PostBackTrigger ControlID="RadGrid1" />--%>
            </Triggers>
            <ContentTemplate>
                <telerik:RadGrid ID="RadGrid1" runat="server" AutoGenerateColumns="false" OnItemCommand="RadGrid1_ItemCommand"
                    OnNeedDataSource="RadGrid1_NeedDataSource">
                    <MasterTableView Width="950" AutoGenerateColumns="false" DataKeyNames="EmpID" GridLines="None"
                        TableLayout="Auto">
                        <Columns>
                            <telerik:GridBoundColumn DataField="EmpID" HeaderText="Emp ID" ReadOnly="true" HeaderStyle-HorizontalAlign="Left"
                                ItemStyle-HorizontalAlign="Left" UniqueName="EmpID" FilterControlWidth="30px"
                                AutoPostBackOnFilter="true" CurrentFilterFunction="Contains" />
                            <telerik:GridButtonColumn DataTextField="ButtonName" ItemStyle-ForeColor="Blue" CommandName="Generate"
                                ConfirmTextFields="ButtonName" ConfirmTextFormatString="Would you like to  {0} ACH file ?"
                                ConfirmDialogType="RadWindow" Reorderable="false" UniqueName="ButtonName" ConfirmTitle="ACH File">
                            </telerik:GridButtonColumn>
                            <telerik:GridBoundColumn DataField="EmployeeName" HeaderText="Employee Name" ReadOnly="true"
                                HeaderStyle-HorizontalAlign="Left" ItemStyle-HorizontalAlign="Left" UniqueName="EmployeeName"
                                FilterControlWidth="60px" AutoPostBackOnFilter="true" CurrentFilterFunction="Contains" />
                        </Columns>
                    </MasterTableView>
                </telerik:RadGrid>
            </ContentTemplate>
        </asp:UpdatePanel>

ダウンロードボタンをクリックすると、ファイルをダウンロードできません。これはItemcommandのコードです。

protected void RadGrid1_ItemCommand(object sender, Telerik.Web.UI.GridCommandEventArgs e)
    {
        if (e.CommandName == "Generate")
        {
            Response.ContentType = "text/plain";
            Response.AppendHeader("Content-Disposition", "attachment;filename= errorLog.txt");
            Response.AddHeader("content-length", "0");
            Response.Flush();
            Response.End();
        }
    }

誰かが私を助けてくれますか?AsyncPostBackTrigger

4

1 に答える 1

2

AsyncPostBack で Response を呼び出すことはできません。Ajax Framework の制限です。

2013 年 1 月 28 日更新

あなたはテレリックを使用しているので、私は RadAjaxManager を使用することを好みます。基本的に、Generate ボタンをクリックすると、ajax ではなく通常のポストバックを使用します。私の例では、ソートは依然として ajax を使用しています。

<telerik:RadGrid ID="RadGrid1" AutoGenerateColumns="false" AllowSorting="True" runat="server" 
    OnNeedDataSource="RadGrid1_NeedDataSource" OnItemCommand="RadGrid1_ItemCommand">
    <MasterTableView DataKeyNames="EmpID">
        <Columns>
            <telerik:GridTemplateColumn>
                <ItemTemplate>
                    <asp:Button runat="server" CommandName="Generate" ID="GenerateButton" 
                        Text="Generate" OnClientClick="Generate(this, event); return false;" />
                </ItemTemplate>
            </telerik:GridTemplateColumn>
            <telerik:GridBoundColumn DataField="EmpID" HeaderText="Emp ID" UniqueName="EmpID" SortExpression="EmpID" />
            <telerik:GridBoundColumn DataField="EmployeeName" HeaderText="Employee Name" UniqueName="EmployeeName" />
        </Columns>
    </MasterTableView>
</telerik:RadGrid>
<%-- RadAjaxManager --%>
<telerik:RadAjaxManager ID="RadAjaxManager1" runat="server">
    <AjaxSettings>
        <telerik:AjaxSetting AjaxControlID="RadGrid1">
            <UpdatedControls>
                <telerik:AjaxUpdatedControl ControlID="RadGrid1" LoadingPanelID="RadAjaxLoadingPanel1" />
            </UpdatedControls>
        </telerik:AjaxSetting>
    </AjaxSettings>
</telerik:RadAjaxManager>
<%-- RadAjaxLoadingPanel --%>
<telerik:RadAjaxLoadingPanel ID="RadAjaxLoadingPanel1" runat="server" Skin="Default">
</telerik:RadAjaxLoadingPanel>
<telerik:RadCodeBlock ID="RadCodeBlock1" runat="server">
    <script type="text/javascript">
        function Generate(sender, e) {
            $find("<%= RadAjaxManager1.ClientID %>").__doPostBack(sender.name, "");
        }
    </script>
</telerik:RadCodeBlock>

public class Employee
{
    public int EmpID { get; set; }
    public string EmployeeName { get; set; }
}

protected void RadGrid1_NeedDataSource(object sender, GridNeedDataSourceEventArgs e)
{
    RadGrid1.DataSource = new List<Employee>
        {
            new Employee {EmpID = 1, EmployeeName = "John"},
            new Employee {EmpID = 2, EmployeeName = "Marry"},
            new Employee {EmpID = 3, EmployeeName = "Eric"}
        };
}

protected void RadGrid1_ItemCommand(object sender, GridCommandEventArgs e)
{
    if (e.CommandName == "Generate")
    {
        Response.ContentType = "text/plain";
        Response.AppendHeader("Content-Disposition", "attachment;filename= errorLog.txt");
        Response.AddHeader("content-length", "0");
        Response.Flush();
        Response.End();
    }
}

ここに画像の説明を入力

于 2013-01-25T18:00:45.167 に答える