FileUpload控件未显示已发布的文件

时间:2014-05-05 11:29:17

标签: c# asp.net file-upload .net-framework-version httppostedfile

我正在尝试使用一个FileUpload控件在aspx页面上上传多个文件。我已将控件设置为允许多个文件:

<asp:FileUpload ID="fuAttach" Multiple="Multiple" runat="server" Visible="False" />

现在,点击一个按钮,我想获取每个文件的数据并将其保存到数据库中(使用REST服务,但现在这并不重要)。根据Visual Studio,我可以访问PostedFile属性,但不能访问PostedFiles控件的FileUpload属性。

'System.Web.UI.WebControls.FileUpload' does not contain a definition for 'PostedFiles' and no extension method 'PostedFiles' accepting a first argument of type 'System.Web.UI.WebControls.FileUpload' could be found (are you missing a using directive or an assembly reference?)

调试时,PostedFiles属性可见并包含我的所有文件:

Posted Files

另外,我尝试使用Request.Files,但这只是给了我FileUpload控件的id:

Request.Files

另外,查看FileUpload控件时,没有PostedFiles

public class FileUpload : WebControl
{
    public FileUpload();

    public byte[] FileBytes { get; }
    public Stream FileContent { get; }
    public string FileName { get; }
    public bool HasFile { get; }
    public HttpPostedFile PostedFile { get; }

    protected override void AddAttributesToRender(HtmlTextWriter writer);
    protected internal override void OnPreRender(EventArgs e);
    protected internal override void Render(HtmlTextWriter writer);
    public void SaveAs(string filename);
}

我在这里错过了什么吗?

3 个答案:

答案 0 :(得分:9)

转到项目“属性”中的“应用程序”选项卡,将“目标框架”更改为4.5。

答案 1 :(得分:5)

我可能来得太晚了,但因为我遇到了同样的问题。 我决定在这里发布我的答案,以便将来找到答案。 我必须使用绕行来解决这个问题。

dynamic fileUploadControl = fileUpload1;
foreach(var file in fileUploadControl.PostedFiles)
{//do things here}

将fileUpload userControl转换为动态对象将允许您绕过编译时错误检查。

答案 2 :(得分:2)

它应该是这样的:

<asp:FileUpload runat="server" ID="UploadImages" AllowMultiple="true" />

html代码将是这样的:

<div>
    <asp:FileUpload runat="server" ID="UploadImages" AllowMultiple="true" />
    <asp:Button runat="server" ID="uploadedFile" Text="Upload" OnClick="uploadFile_Click" />
    <asp:Label ID="listofuploadedfiles" runat="server" />
</div>

上传按钮后面的代码:

protected void uploadFile_Click(object sender, EventArgs e)
{
   if (UploadImages.HasFiles)
   {
       foreach (HttpPostedFile uploadedFile in UploadImages.PostedFiles)
       {
           uploadedFile.SaveAs(System.IO.Path.Combine(Server.MapPath("~/Images/"),
           uploadedFile.FileName)); listofuploadedfiles.Text += String.Format("{0}<br />", uploadedFile.FileName);
       }
   }
}