Постбэк вызывает проблему - PullRequest
2 голосов
/ 22 апреля 2011

У меня есть сетка, в которой отображаются имена файлов, получаемые из базы данных. Я сделал имя файла в качестве ссылки в моем окне сетки.

<asp:GridView ID="gdvMainList" runat="server" CssClass="Grid" 
AutoGenerateColumns="False" DataSourceID="dtsFilesUploaded" 
AllowPaging="True" DataKeyNames="Id" SkinID="PagedGridView" AllowSorting="True" 
onrowediting="gdvMainList_RowEditing" OnRowDataBound="gdvMainList_RowDataBound"                                                     onrowupdating="gdvMainList_RowUpdating" onrowcommand="gdvMainList_RowCommand">                                                    
<Columns>

<asp:TemplateField HeaderText="File Name" SortExpression="FileName">
<ItemTemplate>
<asp:LinkButton ID="lbFileName" runat="server" Text='<%# Bind("FileName") %>' OnClick="OpenFile" CausesValidation="false"></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>

<asp:TemplateField HeaderText="Uploaded On" SortExpression="CreatedDateTime">
<ItemTemplate>
<asp:Label ID="lblCreatedDate" runat="server" Text='<%# Bind("CreatedDateTime") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Category" SortExpression="glCategoryId">
<ItemTemplate>
<asp:Label ID="lblglCategoryId" runat="server" Text='<%# Bind("GeneralLookup.LookupItem") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList ID="ddlglCategoryId" runat="server" CssClass="textEntry2" DataSourceID="dtsglCategoryId"                                                            DataTextField="LookupItem" DataValueField="Id" AppendDataBoundItems="true" Width="120px">
</asp:DropDownList>
</EditItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Description" HeaderText="Description" SortExpression="Description" />
<asp:BoundField DataField="CreatedBy" HeaderText="Created By" Visible="false" />
</Columns>
</asp:GridView>

Кнопка ссылки имеет метод Onclick = "OpenFile", а код открытого файла:

protected void OpenFile(object sender, EventArgs e)
    {
        LinkButton btn = (LinkButton)sender;
        string fileName = btn.Attributes["FileName"].ToString();

        //string path = Server.MapPath(".") + "\\Files\\" + fileName;
        string path = Server.MapPath("~") + "Upload\\" + this.fileUpload.FileName;
        if (File.Exists(path))
        {
            Response.AppendHeader("content-disposition", "filename=" + fileName);
            string type = "Application/word";
            if (type != "")
                Response.ContentType = type;
            Response.WriteFile(path);
            Response.End();
        }
        else
        {
        }   
    }

Теперь проблема в том, что этот код не работает в панели обновления и работает очень хорошо без панели обновления. Вот почему я пытаюсь добавить эти строки, чтобы сделать пост обратно.

<Triggers>
     <asp:PostBackTrigger ControlID="btnFileUploadSave" />
     <asp:PostBackTrigger ControlID="lbFileName" />

Control Id btnFileUploadSave - еще одна кнопка с изображением в моем файле, которая используется для загрузки файла. Поскольку загрузка файла также не была возможна в панели обновления без этого.

В любом случае, когда я запускаю этот код, возникает следующее исключение:

Server Error in '/' Application.

Не удалось найти элемент управления с идентификатором 'lbFileName' для триггера в UpdatePanel 'upAttachFile'. Описание: во время выполнения текущего веб-запроса произошло необработанное исключение. Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде.

Сведения об исключении: System.InvalidOperationException: не удалось найти элемент управления с идентификатором 'btnOpenFile' для триггера в UpdatePanel 'upAttachFile'.

Пожалуйста, помогите, если кто-нибудь может. Я потратил впустую много времени на это.

Вот графический интерфейс моей страницы aspx:

enter image description here

Ответы [ 2 ]

0 голосов
/ 25 апреля 2011

Я нашел другую альтернативу для этого. Я открываю новую страницу, используя window.open (), нажав на кнопку ссылки. Это решило проблему.

0 голосов
/ 22 апреля 2011

Нельзя определить элемент управления в ItemTemplate как триггер UpdatePanel.

Для решения проверьте this out. В основном вы должны зарегистрировать элемент управления как триггер в событии OnItemDataBound.

Другим решением для вас, возможно, является AsyncFileUpload , который не требует полной обратной передачи для работы.

РЕДАКТИРОВАТЬ: фиксированная первая ссылка.

...