FileUpload Contol未显示已发布的文件

Car*_*rel 7 c# asp.net file-upload .net-framework-version httppostedfile

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

<asp:FileUpload ID="fuAttach" Multiple="Multiple" runat="server" Visible="False" />
Run Code Online (Sandbox Code Playgroud)

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

'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?)
Run Code Online (Sandbox Code Playgroud)

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

发布文件

此外,我尝试使用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);
}
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么吗?

小智 10

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


小智 5

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

dynamic fileUploadControl = fileUpload1;
foreach(var file in fileUploadControl.PostedFiles)
{//do things here}
Run Code Online (Sandbox Code Playgroud)

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


Kru*_*til 2

它应该是这样的:

<asp:FileUpload runat="server" ID="UploadImages" AllowMultiple="true" />
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

上传按钮后面的代码:

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);
       }
   }
} 
Run Code Online (Sandbox Code Playgroud)