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 的文件名始终为空,然后文件无法正确保存。

任何建议都会很棒。

谢谢

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

然后它应该可以毫无问题地工作。