GridView中的PostBackTrigger for FileUpload功能

时间:2012-04-18 08:14:15

标签: c# asp.net gridview triggers postback

我在.aspx页面中有一个asp:GridView控件,用户可以添加几行数据。用户还必须能够将文件附加到添加的每行数据。

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

任何建议都很棒。

由于

4 个答案:

答案 0 :(得分:0)

在Gridview行数据绑定中,您必须找到文件上传控件,然后将其添加到UpdatePanel回发触发器。

答案 1 :(得分:0)

我没有找到解决问题的办法,但我确实解决了这个问题(某种程度上)。我知道只需添加一个指向网格的链接,当用户点击它通过querystring发送ID时,会打开一个新页面来处理整个上传过程并返回已保存文档的URL。

不太理想,但它有效并且让我节省了数小时的挫折感。

答案 2 :(得分:0)

在网格的OnItemDataBound事件处理程序中需要调用ScriptManager.GetCurrent(this).RegisterPostBackControl(ControlID);

答案 3 :(得分:0)

这是一个旧帖子,但对于任何坚持使用它的人,您需要将其他内容添加到您的控件中。

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

然后应该没有问题。