jithesh a Ответов: 3

Функция загрузки не работает в панели обновления в asp.net


В 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);
        }

3 Ответов

Рейтинг:
9

jithesh a

Добавьте кнопку за пределами updatepanel

<asp:button id="BtnDownload" onclick="DownloadFile_Click" runat="server" visible="false" xmlns:asp="#unknown" />


функция JavaScript

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


<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="4"

                                   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 = "lnkDownloadNew_Click" />    <%--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>



.цезий

protected void DownloadFile_Click(object sender, EventArgs e)
     {
         //var  filePath = Request.Form["__EVENTARGUMENT"];
         string filePath = ViewState["filepath"].ToString();
         Response.ContentType = ContentType;
         Response.AppendHeader("Content-Disposition", "attachment; filename=" + Path.GetFileName(filePath));
         Response.WriteFile(filePath);
         Response.End();
         ExprotFileList();
     }
     protected void lnkDownloadNew_Click(object sender, EventArgs e)
     {
         string filePath = (sender as ImageButton).CommandArgument;
         ScriptManager.RegisterStartupScript(this, typeof(ImageButton), "scr", "DownloadFile('" + filePath + "');", true);
         ViewState["filepath"] = filePath;

     }


Tahir Mahmood From karachi

это проверено мной и и это работает

Рейтинг:
1

Magesh M N

Привет,

Для действия загрузки требуется действие post back, но в панели обновления действие post back не срабатывает..
поэтому вам нужно добавить триггер для элемента управления, чтобы инициировать загрузку..


<asp:updatepanel runat="server" id="upPanel1" xmlns:asp="#unknown">
<contenttemplate>
//Contents
</contenttemplate>
<trigger>
<asp:postbacktrigger controlid="ID" />
</trigger>
</asp:updatepanel>


jithesh a

< asp:postbacktrigger controlid= "ID" />. является ли этот идентификатор для 'lnkDownload' в приведенном выше коде?

Magesh M N

да

jithesh a

Это не работает

Рейтинг:
0

Tahir Mahmood From karachi

он работает в updatepanel


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