【问题标题】:download file (Image Button ) option is not working in UpdatePanel?下载文件(图像按钮)选项在 UpdatePanel 中不起作用?
【发布时间】:2015-01-03 23:39:59
【问题描述】:

gridview 中有一个图片按钮可以下载文件。我已将 gridview 与 updatepanel 一起使用。如果我删除了 Updatepanel,下载选项将正常工作。但我必须在此使用 Updatepanel。我该如何解决这个问题?

 <asp:UpdatePanel ID="UpdatePanel2" runat="server" >
                        <ContentTemplate>
               <asp:GridView ID="GridImport" runat="server" AutoGenerateColumns="false" Width="99%" Height="50%"
                                    AllowPaging="true" GridLines="None" Style="padding: 15px; text-align: left; overflow: scroll;
                                    font-family: Arial; font-size: 11pt;" ShowHeaderWhenEmpty="true" PageSize="5"
                                    CssClass="Grid_LE" HeaderStyle-CssClass="Grid_Head" EmptyDataText = "No files Imported" OnPageIndexChanging="GridImport_PageIndexChanging">
                <Columns>
                    <asp:BoundField DataField="Text" HeaderText="File Name" />
                    <asp:TemplateField>
                        <ItemTemplate>
                              <asp:ImageButton ID="lnkDownload" runat="server" CommandArgument='<%# Eval("Value") %>'  Style="width: 20px; height: 20px;" ImageUrl="~/Images/download.png" OnClick = "DownloadFile"  />   <%--CommandName="Upload"  OnClick="DownloadFile"--%>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField>
                        <ItemTemplate>
                              <asp:ImageButton ID="lnkDelete" runat="server" CommandArgument='<%# Eval("Value") %>'  Style="width: 20px; height: 20px;" ImageUrl="~/Images/cancel.png" OnClick="DeleteFile" />
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>
            </asp:GridView>
           </ContentTemplate>
                    </asp:UpdatePanel> 

.cs

   protected void DownloadFile(object sender, EventArgs e)
        {
            string filePath = (sender as ImageButton).CommandArgument;
            Response.ContentType = ContentType;
            Response.AppendHeader("Content-Disposition", "attachment; filename=" + Path.GetFileName(filePath));
            Response.WriteFile(filePath);
            Response.End();
        }
        protected void DeleteFile(object sender, EventArgs e)
        {
            string filePath = (sender as ImageButton).CommandArgument;
            File.Delete(filePath);
            ExprotFileList();
            ClientScript.RegisterStartupScript(GetType(), "Val", "ShowExpPopup();", true);
        }

【问题讨论】:

标签: asp.net


【解决方案1】:

在您的代码中使用trigger

 <asp:UpdatePanel ID="UpdatePanel2" runat="server" >
                        <ContentTemplate>
               <asp:GridView ID="GridImport" runat="server" AutoGenerateColumns="false" Width="99%" Height="50%"
                                    AllowPaging="true" GridLines="None" Style="padding: 15px; text-align: left; overflow: scroll;
                                    font-family: Arial; font-size: 11pt;" ShowHeaderWhenEmpty="true" PageSize="5"
                                    CssClass="Grid_LE" HeaderStyle-CssClass="Grid_Head" EmptyDataText = "No files Imported" OnPageIndexChanging="GridImport_PageIndexChanging">
                <Columns>
                    <asp:BoundField DataField="Text" HeaderText="File Name" />
                    <asp:TemplateField>
                        <ItemTemplate>
                              <asp:ImageButton ID="lnkDownload" runat="server" CommandArgument='<%# Eval("Value") %>'  Style="width: 20px; height: 20px;" ImageUrl="~/Images/download.png" OnClick = "DownloadFile"  />   <%--CommandName="Upload"  OnClick="DownloadFile"--%>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField>
                        <ItemTemplate>
                              <asp:ImageButton ID="lnkDelete" runat="server" CommandArgument='<%# Eval("Value") %>'  Style="width: 20px; height: 20px;" ImageUrl="~/Images/cancel.png" OnClick="DeleteFile" />
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>
            </asp:GridView>
           </ContentTemplate>
       <Triggers>
            <asp:PostBackTrigger ControlID="lnkDownload" /> **Or**
            <asp:AsyncPostBackTrigger ControlID="lnkDownload" EventName="OnClick" />
        </Triggers>
                    </asp:UpdatePanel>

【讨论】:

  • 在 UpdatePanel 'UpdatePanel2' 中找不到触发器的 ID 为 'lnkDownload' 的控件。这个错误越来越
  • 在 UpdatePanel 'UpdatePanel2' 中找不到触发器的 ID 为 'lnkDownload' 的控件。同样的错误正在发生
  • 这不起作用 - 请参阅 stackoverflow.com/a/4937603/1191903 了解注册触发器的正确​​方法
【解决方案2】:

在您的代码文件中:

protected void ClickFromUpdate_Click(object sender, EventArgs e)
{
      string filePath = (sender as ImageButton).CommandArgument;
      ScriptManager.RegisterStartupScript(this, this.GetType(), "DownloadScript", "$(function() {DownloadFile(" + filePath + ");});", true);
}

protected void DownloadFile_Click(object sender, EventArgs e)
{
     //Your download code
     var filePath = Request.Form["__EVENTARGUMENT"];
     Response.ContentType = ContentType;
     Response.AppendHeader("Content-Disposition", "attachment; filename=" + Path.GetFileName(filePath));
     Response.WriteFile(filePath);
     Response.End();
}

在更新面板内的标记文件中:

<asp:TemplateField>
    <ItemTemplate>
        <asp:ImageButton ID="lnkDownload" runat="server" CommandArgument='<%# Eval("Value") %>'  Style="width: 20px; height: 20px;" ImageUrl="~/Images/download.png" OnClick = "ClickFromUpdate_Click"  />
    </ItemTemplate>
</asp:TemplateField>

在您的标记文件中,将此按钮添加到更新面板之外:

<asp:Button ID="ButtonDownload"  OnClick="DownloadFile_Click" runat="server" />

Javascript 代码:

function DownloadFile(filepath) {
            __doPostBack("<%= ButtonDownload.UniqueID %>", filepath);
        }

【讨论】:

  • 请说出“ClickFromUpdate_Click”是什么?
  • 对不起,jithesh。从 gridview 调用方法“ClickFromUpdate_Click”。我的代码示例已使用该代码进行了更新。
  • 非常感谢您的回复。但是' ScriptManager.RegisterStartupScript(this, this.GetType(), "DownloadScript", "$(function() {DownloadFile(" + filePath + ");}) ;“, 真的);没有在我的代码中调用“DownloadFile”函数。?
  • ScriptManager.RegisterStartupScript(this, typeof(ImageButton), "scr", "DownloadFile('" + filePath + "');", true); .它工作正常.....感谢您的大力帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-23
  • 1970-01-01
  • 2019-08-08
  • 1970-01-01
  • 1970-01-01
  • 2011-02-07
  • 2018-09-27
相关资源
最近更新 更多