gridview内的FileUpload控件(ajax updatepanel)

时间:2011-03-11 12:32:19

标签: asp.net vb.net file-upload

我在gridview中有一个fileupload控件,这样每一行(数据库中的项)都可以有一个与之关联的附件。我在fileupload控件旁边有一个按钮(除了默认浏览...按钮以选择文件)以实际获取文件并将其上传到文件服务器。

如果我使用“上传”按钮,这很有效。但是,在我的gridview下面,我有另一个在gridview之外的图像按钮,它只是坐在窗体/页面上。 这个“更新”按钮的想法是当最终用户对网格进行更改时,我可以简单地遍历网格并更新他们输入到数据库的值。这也很有效。

现在这是我的问题假设用户在网格视图中有3行。在其中的两行中,他决定添加一个附件,但他从不点击“上传”按钮,他只使用标准浏览按钮来选择文件。现在,不是单击网格视图上的“上传”按钮,而是单击网格外部的“更新”按钮,认为它将保存其附件。

所以我决定编写代码,在我的Update按钮循环中使用.FindControls("NameOfFileUploadControl")从网格中获取fileupload控件,我循环遍历所有行。然后我检查myFileUploadControl.HasFile属性是否存在文件以及是否上传文件然后继续代码。

问题是当我点击这个“更新”按钮.HasFile总是返回false,即使我可以在fileuploadcontrol文本框中看到路径的文本字符串(浏览按钮旁边的标准字符串)。是因为这会回到页面加载事件并检查它是否是回发帖?是什么导致这种情况以及如何解决?

修改

我添加了一些代码因为我仍然与此混淆

Protected Sub SaveGrid()
 For Each Row As GridViewRow In Me.gvLineItems.Rows
            Dim f As FileUpload = CType(Row.FindControl("fuAttachment"), FileUpload)
                'todo: this part is not working
                If f.FileName.Length > 0 Then 'returns 0 always
                    'this returns 0.
                end if

                if f.HasFile() then
                      'this also returns false
                end if
 Next
End Sub

只需点击按钮即可调用此方法......

fileupload控件位于一个包含在UpdatePanel内的gridview中:

<asp:FileUpload Width="90px" Font-Size="xx-small" ID="fuAttachment" runat="server" />

那么为什么这个属性总是返回false?

1 个答案:

答案 0 :(得分:0)

这是Ajax更新面板的一个臭名昭着的问题。

以下是一些可能有用的文章的链接。

http://wikiaspnet.wordpress.com/2008/03/11/ajax-fileupload/

http://www.codeproject.com/KB/ajax/simpleajaxupload.aspx