我有一个gridview,我在其中显示从Database获取的文件名。我已将文件名作为gridview中的链接按钮。
<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”,Open文件的代码是:
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.
在UpdatePanel'updownAttachFile'中找不到ID为“lbFileName”的控件。 描述:执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪,以获取有关错误及其在代码中的起源位置的更多信息。
异常详细信息:System.InvalidOperationException:在UpdatePanel'updAttachFile'中找不到触发器ID为“btnOpenFile”的控件。
如果有人可以,请帮忙。在这方面,我浪费了一倍的时间。
这是我的aspx页面的GUI:
答案 0 :(得分:0)
您无法将ItemTemplate中的控件定义为UpdatePanel触发器。
要获得解决方案,请检查this。基本上你必须在OnItemDataBound事件中将控件注册为触发器。
另一个解决方案可能是AsyncFileUpload,它不需要完整的回发工作。
编辑:修复了第一个链接。
答案 1 :(得分:0)
我找到了另一种选择。我在单击链接按钮时使用window.open()打开一个新页面。这解决了这个问题。