PostBackTrigger 用于 GridView 中的 FileUpload 功能
本文关键字:FileUpload 功能 中的 GridView 用于 PostBackTrigger | 更新日期: 2023-09-27 18:31:32
我在.aspx页中有一个asp:GridView控件,用户可以向其添加几行数据。用户还必须能够将文件附加到添加的每一行数据。
为此,我在网格视图中使用以下内容:
<asp:TemplateField HeaderText="Upload" HeaderStyle-Width="120px">
<EditItemTemplate>
<asp:FileUpload ID="fuUploadLocation" runat="server" Width="98%" TabIndex="18" />
</EditItemTemplate>
</asp:TemplateField>
然后为了保存文件上传的位置,我在代码隐藏中使用 RowUpdating 事件来设置值等。
问题是我无法为 html 上的控件注册 PostBackTrigger,因为它不会拾取它,因为它在 GridView 中。我尝试从其他示例中动态设置它,但似乎无法使其工作,结果是我的 FileUpload 的文件名始终为空,然后文件无法正确保存。
任何建议都会很棒。
谢谢
在 Gridview 行数据绑定上,必须找到文件上载控件,然后将其添加到 UpdatePanel 回发触发器。
我还没有找到解决问题的方法,但我确实解决了它(有点)。我知道只需向网格添加一个链接,当用户单击它通过查询字符串发送 ID 时,将打开一个新页面,处理整个上传过程并返回已保存文档的 URL。
不理想,但它有效并节省了我数小时的挫败感。
在网格的 OnItemDataBound 事件处理程序中需要调用 ScriptManager.GetCurrent(this)。RegisterPostBackControl(ControlID);
这是一个旧帖子,但对于任何坚持使用它的人,您需要将以下内容添加到您的控件中,如其他答案中所述。
protected void ItemDataBound(object sender, EventArgs e)
{
Button myButton = (Button)e.Item.FindControl("myButton");
if (myButton != null)
ScriptManager.GetCurrent(Page).RegisterPostBackControl(myButton);
}
您还需要将表单标签中的 enctype 更改为以下内容,例如:
protected void Page_PreRender(object sender, EventArgs e)
{
Page.Form.Attributes.Add("enctype", "multipart/form-data");
}
然后它应该可以毫无问题地工作。