【发布时间】:2011-07-13 11:24:19
【问题描述】:
我在gridview 中有一个fileupload 控件,这样每一行(来自数据库的项目)都可以有一个与之关联的附件。我在文件上传控件旁边有一个按钮(除了用于选择文件的默认浏览...按钮)来实际获取文件并将其上传到文件服务器。
如果我使用此按钮“上传”,这将非常有用。但是,在我的gridview 下方,我有另一个位于gridview 之外的图像按钮,它只是位于表单/页面上。 这个“更新”按钮的想法是当最终用户对网格进行更改时,我可以简单地遍历网格并更新他们输入到数据库中的值。这也很有效。
现在这是我的问题假设用户在网格视图中有 3 行。在其中的 2 行中,他决定添加一个附件,但他从不点击“上传”按钮,他只使用标准浏览按钮来选择文件。现在,他没有点击网格视图上的“上传”按钮,而是点击了网格外部的“更新”按钮,认为这会保存他的附件。
所以我决定编写代码,在我的更新按钮循环中使用.FindControls("NameOfFileUploadControl") 从网格中获取文件上传控件,循环遍历所有行。然后我检查 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 中:
<asp:FileUpload Width="90px" Font-Size="xx-small" ID="fuAttachment" runat="server" />
那么为什么这个属性总是返回 false?
【问题讨论】:
标签: asp.net vb.net file-upload