basitsar Ответов: 2

Datalist внутри панели обновления linkbutton не загружает файл


Привет,

DataList внутри панели обновления linkbutton не загружает файл.

Ниже приведен мой код

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>
            <asp:Panel runat="server" ID="UpdatePanel1" ChildrenAsTriggers="false">
                <div style="vertical-align: middle; min-height: 480px;" class="pre-scrollable">
                    <div>
                        <asp:DataList ID="DataList2" runat="server" p Font-Bold="False" Font-Italic="False" Font-Overline="False" Font-Strikeout="False" Font-Underline="False" HorizontalAlign="Center" RepeatLayout="Table">
                            <ItemTemplate>
                             <div>
                                  <asp:Label ID="Label2" runat="server" Text='<%# Eval("FileName") %>'></asp:Label>
                                  <asp:LinkButton ID="LinkButton1" runat="server" Text='<%# Eval("ImagePath") %>' OnClick="DownloadFile"

                        CommandArgument='<%# Eval("Id")%>'></asp:LinkButton> 
                             </div>
                            </ItemTemplate>
                        </asp:DataList>
                    </div>
                </div>
            </asp:Panel>
        </ContentTemplate>
    </asp:UpdatePanel>


Dim fileName as String="D:\Image\1.jpg"
        Response.Clear()
        Response.Buffer = True
        Response.Charset = ""
        Response.Cache.SetCacheability(HttpCacheability.NoCache)
        'Response.ContentType = contentType
        Response.AppendHeader("Content-Disposition", Convert.ToString("attachment; filename=") & fileName)
        'Response.BinaryWrite(bytes)
        Response.Flush()
        Response.[End]()


Что я уже пробовал:

Я добавил следующий код

</ContentTemplate>
<Triggers>
    <asp:PostBackTrigger ControlID="LinkButton1" />
</Triggers>


Но безуспешно.

Спасибо
Басит.

2 Ответов

Рейтинг:
0

Sheila Pontes

Привет,

Я проверил ваш код, и он показывает мне некоторые ошибки.

Ошибка 1: Два компонента с одинаковыми именами, updatepanel и pane component.
Ошибка 2: Триггеры показывают ошибку (Элемент управления с идентификатором 'LinkButton1' не был найден для триггера в UpdatePanel 'UpdatePanel1').

РЕШЕНИЕ

Чтобы исправить ошибку 1.
Переименуйте один из них.

Чтобы исправить ошибку 2.
Удалите компонент триггера в вашем aspx и событие onclick кнопки linkbutton.
Добавьте событие ItemCreated в DataList

<asp:DataList ID="DataList2" runat="server" p Font-Bold="False" Font-Italic="False" Font-Overline="False" Font-Strikeout="False" Font-Underline="False" HorizontalAlign="Center" RepeatLayout="Table" OnItemCreated="DataList2_ItemCreated">

В коде позади добавьте событие в каждую строку, созданную в вашем Даталисте.
С#
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
            {
                //Assigns the event to each radiobutton item
                ((LinkButton)e.Item.FindControl("LinkButton1")).Click += new System.EventHandler(DownloadFile);
            }

VB.NET
If (e.Item.ItemType = ListItemType.Item Or e.Item.ItemType = ListItemType.AlternatingItem) Then
            'Assigns the event to each radiobutton item
            Dim link As LinkButton = e.Item.FindControl("LinkButton1")

            AddHandler link.Click, AddressOf DownloadFile

        End If

Когда вы нажимаете кнопку linkbutton, событие срабатывает.

Вот! полный код

КОД ASPX
<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head><%@ Page Language="vb" AutoEventWireup="false" CodeBehind="frm_my_test1.aspx.vb" Inherits="vb_web_app_teste.frm_my_test1" %>


<body>
    <form id="form1" runat="server">
    <asp:scriptmanager runat="server"></asp:scriptmanager>
    <div>
        <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>
            <asp:Panel runat="server" ID="Panel1" ChildrenAsTriggers="false">
                <div style="vertical-align: middle; min-height: 480px;" class="pre-scrollable">
                    <div>
                        <asp:DataList ID="DataList2" runat="server" OnItemCreated="DataList2_ItemCreated" Font-Bold="False" Font-Italic="False" Font-Overline="False" Font-Strikeout="False" Font-Underline="False" HorizontalAlign="Center" RepeatLayout="Table">
                            <ItemTemplate>
                             <div>
                                  <asp:Label ID="Label2" runat="server" Text='<%# Eval("FileName") %>'></asp:Label>
                                  <asp:LinkButton ID="LinkButton1" runat="server" Text='<%# Eval("ImagePath") %>'

                        CommandArgument='<%# Eval("Id")%>'></asp:LinkButton> 
                             </div>
                            </ItemTemplate>
                        </asp:DataList>
                    </div>
                </div>
            </asp:Panel>
        </ContentTemplate>
    </asp:UpdatePanel>
    </div>
    </form>
</body>
</html>


КОД-ЗА C#
protected void DownloadFile(object sender, EventArgs e)
        {
            //your download code
            string localFilenameDestiny = @"D:\Image\1.jpg";
            using (WebClient client = new WebClient())
            {
                client.DownloadFile("http://your_domain_application/1.jpg", localFilenameDestiny);
            }
        }

        protected void DataList2_ItemCreated(object sender, DataListItemEventArgs e)
        {
            if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
            {
                //Assigns the event to each radiobutton item
                ((LinkButton)e.Item.FindControl("LinkButton1")).Click += new System.EventHandler(DownloadFile);
            }
        }


КОД-ПОЗАДИ VB.NET
Imports System.Net
Public Class frm_my_test1
    Inherits System.Web.UI.Page


    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim dt As New DataTable()


        dt.Columns.Add("Id")
        dt.Columns.Add("FileName")
        dt.Columns.Add("ImagePath")

        Dim dr As DataRow = dt.NewRow()
        dr("Id") = "1"
        dr("FileName") = "A"
        dr("ImagePath") = "Clique"
        dt.Rows.Add(dr)

        Me.DataList2.DataSource = dt
        Me.DataList2.DataBind()
    End Sub

    Protected Sub DownloadFile(ByVal sender As Object, ByVal e As EventArgs)
        Dim localFilename As String = "F:\1.png" 'path the destiny file
        Dim client As New WebClient()
        'localhost:50751. My local host. The image is in root the application 
        client.DownloadFile("http://localhost:50751/imginfo.png", localFilename)
    End Sub

    Protected Sub DataList2_ItemCreated(ByVal sender As Object, ByVal e As DataListItemEventArgs)

        If (e.Item.ItemType = ListItemType.Item Or e.Item.ItemType = ListItemType.AlternatingItem) Then
            'Assigns the event to each radiobutton item
            Dim link As LinkButton = e.Item.FindControl("LinkButton1")

            AddHandler link.Click, AddressOf DownloadFile

        End If

    End Sub

End Class


basitsar

большое спасибо
Ниже приведен код, но безрезультатно.
&ЛТ;%@ страницы язык="ВБ" значение AutoEventWireup="false" - в отделенного кода="файл webform1.aspx-файл.ВБ" наследует="тест.WebForm1 " % & gt;



& lt;название>



&ЛТ;как ASP:scriptmanager при ИД="ScriptManager1" атрибут runat="сервер"и GT;


<asp:UpdatePanel ID= "UpdatePanel1" runat= "server" >
< contenttemplate>
&ЛТ;АСП:группы атрибут runat="сервер" идентификатор="Панель1" ChildrenAsTriggers="ложно"и GT;


&ЛТ;АСП:таблицы с ID="DataList2" атрибут runat="сервер" Р шрифта-полужирный="ложных" шрифт-курсив="ложных" шрифт-надчеркивание="ложных" шрифт-зачеркнутый="ложных" шрифт-подчеркивание="ложных" HorizontalAlign="центр" RepeatLayout="таблица" OnItemCreated="DataList2_ItemCreated"&ГТ;
& lt;itemtemplate>

&ЛТ;АСП:метка идентификатор="Метка2" атрибут runat="сервер" текст=в'<%# Ивала("именем") %&ГТ; в'>
&ЛТ;как ASP:LinkButton элемент ID="LinkButton1" атрибут runat="сервер" текст=в'<%# Ивала("продуктам") %&ГТ;' CommandArgument='&л;%# Ивала("идентификатор")%&ГТ; в'>












Sheila Pontes

Привет,
Проверьте, работает ли кнопка.
Чтобы помочь вам, я изменю пост выше. Я наберу полный код в vb.
Скопируйте этот код и вставьте его в свой тестовый проект и посмотрите, как он работает.

Рейтинг:
0

Richard Deeming

Декларативный характер PostBackTrigger работает только для одного элемента управления вне списка, связанного с данными. Вы используете DataList, что означает, что может быть несколько копий LinkButton1, так что декларативный триггер не будет работать.

Вместо этого вам нужно будет зарегистрировать триггер из кода позади:

Protected Sub DataList2_ItemCreated(ByVal sender As Object, ByVal e As DataListItemEventArgs)
    If e.Item.ItemType = ListItemType.Item OrElse e.Item.ItemType = ListItemType.AlternatingItem Then
        Dim btn As Control = e.Item.FindControl("LinkButton1")
        If btn IsNot Nothing Then
            ScriptManager.RegisterPostBackControl(btn)
        End If
    End If
End Sub