【问题标题】:How to correctly use the ASP.NET FileUpload control如何正确使用 ASP.NET FileUpload 控件
【发布时间】:2011-01-15 12:58:07
【问题描述】:

我正在尝试在 ASP.NET 中使用 FileUpload 控件

这是我当前的命名空间设置:

using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;

在我的课堂上,我只是在使用:

FileUpload fileUpload = new FileUpload();

但是,通常作为 FileUpload 一部分的属性似乎都不可用...例如 .HasFile。我正在尝试在后面的代码中制作 Button click 方法,我注意到 .HasFile 的大部分用法都在前面的代码中,但据我了解,这应该无关紧要。

有人知道为什么吗?

【问题讨论】:

    标签: c# asp.net networking file-upload


    【解决方案1】:

    ASP.NET 控件应该放在 aspx 标记文件中。这是与他们合作的首选方式。因此,将FileUpload 控件添加到您的页面。确保它具有所有必需的属性,包括 ID 和 runat:

    <asp:FileUpload ID="FileUpload1" runat="server" />
    

    FileUpload1 的实例将在自动生成/更新的 *.designer.cs 文件中自动创建,该文件是您页面的部分类。您通常不必关心其中的内容,只需假设 aspx 页面上的任何控件都是自动实例化的。

    添加一个回发按钮:

    <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
    

    然后转到您有代码的 *.aspx.cs 文件并添加按钮单击处理程序。在 C# 中它看起来像这样:

    protected void Button1_Click(object sender, EventArgs e)
    {
      if (this.FileUpload1.HasFile)
      {
        this.FileUpload1.SaveAs("c:\\" + this.FileUpload1.FileName);
      }
    }
    

    就是这样。一切都应该按预期工作。

    【讨论】:

      【解决方案2】:

      不要在您的代码隐藏文件中实例化FileUpload,只需在您的标记文件(.aspx 文件)中声明它:

      <asp:FileUpload ID="fileUpload" runat="server" />
      

      然后你就可以访问控件的所有属性了,比如HasFile。

      【讨论】:

        【解决方案3】:

        从后面的代码添加 FileUpload 控件应该可以正常工作,其中 HasFile 属性应该可用(例如在您的 Click 事件中)。

        如果属性似乎不可用(作为编译器错误或通过智能感知),您可能引用的变量与您认为的不同。

        【讨论】:

          【解决方案4】:

          我在代码后面的解决方案是:

          System.Web.UI.WebControls.FileUpload fileUpload;
          

          我不知道为什么,但是当您在没有 System.Web.UI.WebControls 的情况下使用 FileUpload 时,它引用的是 YourProject.FileUpload 而不是 System .Web.UI.WebControls.FileUpload.

          【讨论】:

          【解决方案5】:

          我注意到,当智能不适用于对象时,通常在您正在处理的类中的某处出现错误。

          另一个选项是您没有将 FileUpload 对象实例化为实例变量。确保代码:

          FileUpload fileUpload = new FileUpload();
          

          不在你代码后面的函数内。

          【讨论】:

            【解决方案6】:

            老问题,但如果它可能对某人有帮助,这里是完整的示例

            <form id="form1" runat="server">
                <div>
                    <asp:FileUpload ID="FileUpload1" runat="server" /><br/>
                    <asp:Button ID="Button1" runat="server" Text="Upload File" OnClick="UploadFile" /><br/>
                    <asp:Label ID="Label1" runat="server" Text=""></asp:Label>
                </div>
            </form>
            

            在您的代码隐藏中,C# 代码抓取文件并将其保存在目录中

            protected void UploadFile(object sender, EventArgs e)
                {
                    //folder path to save uploaded file
                    string folderPath = Server.MapPath("~/Upload/");
            
                    //Check whether Directory (Folder) exists, although we have created, if it si not created this code will check
                    if (!Directory.Exists(folderPath))
                    {
                        //If folder does not exists. Create it.
                        Directory.CreateDirectory(folderPath);
                    }
            
                   //save file in the specified folder and path
                    FileUpload1.SaveAs(folderPath + Path.GetFileName(FileUpload1.FileName));
            
                    //once file is uploaded show message to user in label control
                    Label1.Text = Path.GetFileName(FileUpload1.FileName) + " has been uploaded.";
                }
            

            来源:File Upload in ASP.NET (Web-Forms Upload control example)

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2019-09-07
              • 1970-01-01
              • 1970-01-01
              • 2018-03-06
              • 1970-01-01
              • 2010-09-27
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多