【问题标题】:FileUpload.HasFile always shows falseFileUpload.HasFile 总是显示 false
【发布时间】:2018-09-12 17:11:33
【问题描述】:

我正在通过以下代码动态加载三个文件上传控件。

protected void Page_Load(object sender, EventArgs e)
{          
       Table tblDocuments = new Table();
        tblDocuments.CellPadding=8;
        tblDocuments.CellSpacing=8;

        TableRow tr7 = new TableRow();

        TableCell tc13 = new TableCell();
        Label lblSRV=new Label();
        lblSRV.Text="SRV:";
        tc13.BackColor = System.Drawing.ColorTranslator.FromHtml("#4FB0B0");
        lblSRV.ForeColor=System.Drawing.Color.Black;
        lblSRV.Font.Bold=true;
        tc13.Controls.Add(lblSRV);
        tr7.Cells.Add(tc13);

        TableCell tc14 = new TableCell();
        fuUploadSRV.ID = "SRV";
        tc14.Controls.Add(fuUploadSRV);
        tc14.HorizontalAlign = HorizontalAlign.Center;
        tc14.VerticalAlign = VerticalAlign.Middle;

        tr7.Cells.Add(tc14);
        tblDocuments.Rows.Add(tr7);

        TableRow tr8 = new TableRow();

        TableCell tc15 = new TableCell();           
        Label lblMAtrialCertificate = new Label();
        lblMAtrialCertificate.Text = "Material/Product Certificate:";
        lblMAtrialCertificate.ForeColor = System.Drawing.Color.Black;
        lblMAtrialCertificate.Font.Bold = true;
        tc15.BackColor = System.Drawing.ColorTranslator.FromHtml("#4FB0B0");
        tc15.Controls.Add(lblMAtrialCertificate);
        tr8.Cells.Add(tc15);

        TableCell tc16 = new TableCell();
        fuUploadMaterialCertificate.ID = "MaterialCertificate";
        tc16.Controls.Add(fuUploadMaterialCertificate);
        tc16.HorizontalAlign = HorizontalAlign.Center;
        tc16.VerticalAlign = VerticalAlign.Middle;

        tr8.Cells.Add(tc16);
        tblDocuments.Rows.Add(tr8);


        TableRow tr9 = new TableRow();

        TableCell tc17 = new TableCell();
        Label lblPurchaseOrder = new Label();
        lblPurchaseOrder.Text = "Purchase Order:";
        lblPurchaseOrder.ForeColor = System.Drawing.Color.Black;
        lblPurchaseOrder.Font.Bold = true;
        tc17.BackColor = System.Drawing.ColorTranslator.FromHtml("#4FB0B0");
        tc17.Controls.Add(lblPurchaseOrder);
        tr9.Cells.Add(tc17);

        TableCell tc18 = new TableCell();
        fuUploadPurchaseOrder.ID="Purchase";
        tc18.Controls.Add(fuUploadPurchaseOrder);
        tc18.HorizontalAlign = HorizontalAlign.Center;
        tc18.VerticalAlign = VerticalAlign.Middle;

        tr9.Cells.Add(tc18);
        tblDocuments.Rows.Add(tr9);

        placeSubmit.Controls.Add(tblDocuments);

}

我正在处理按钮点击事件中的文件

void btnSubmit_Click(object sender, EventArgs e)
{

   if (fuUploadSRV.HasFile)
        {
            string srvFilename = Path.GetFileName(fuUploadSRV.PostedFile.FileName);
            Stream fs = fuUploadSRV.PostedFile.InputStream;
            int filesize = fuUploadSRV.PostedFile.ContentLength;
            BinaryReader br = new BinaryReader(fs);
            byte[] content = br.ReadBytes(filesize);
            Objects.UpdateSRVFileDetails(srvFilename, content,txtSRV.Text.ToString().Trim());

        }

        if (fuUploadMaterialCertificate.HasFile)
        {
            string materialFilename = Path.GetFileName(fuUploadMaterialCertificate.PostedFile.FileName);
            Stream fs = fuUploadMaterialCertificate.PostedFile.InputStream;
            int filesize = fuUploadMaterialCertificate.PostedFile.ContentLength;
            BinaryReader br = new BinaryReader(fs);
            byte[] content = br.ReadBytes(filesize);
            Objects.UpdateMaterialCertificateFileDetails(materialFilename, content, txtSRV.Text.ToString().Trim());
        }

        if (fuUploadPurchaseOrder.HasFile)
        {
            string poFilename = Path.GetFileName(fuUploadPurchaseOrder.PostedFile.FileName);
            Stream fs = fuUploadPurchaseOrder.PostedFile.InputStream;
            int filesize = fuUploadPurchaseOrder.PostedFile.ContentLength;
            BinaryReader br = new BinaryReader(fs);
            byte[] content = br.ReadBytes(filesize);
            Objects.UpdatePurchaseOrderFileDetails(poFilename, content, txtPurchaseOrderNo.Text.ToString().Trim());
        }

}

现在在调试时,虽然我选择了一个文件,但 fuUploadSRV.HasFile,fuUploadMaterialCertificate.HasFile,fuUploadPurchaseOrder.HasFile 总是返回 false。

我错过了什么吗?

【问题讨论】:

  • 您是否实例化了新的 fileUpload 控件?正如我在您的代码中看到的那样,您只通过fuUploadPurchaseOrder.ID="Purchase"; 声明了它的ID,但没有实例化。
  • 谢谢..我实例化了所有的文件上传控件
  • 我实例化了 Page_load 之外的所有控件...
  • 您是否尝试在 Page_Init 中添加控件?

标签: c# asp.net c#-4.0


【解决方案1】:

您是否尝试更新您的<form runat="server" 以包含enctype="multipart/form-data"

没有它可能会发生奇怪的事情!

【讨论】:

  • 是的...我做到了,但是当我单击提交按钮时,页面正在回发,并且正在再次创建控件。在此过程中,所选文件丢失。页面加载事件首先发生,然后是单击事件。我不知道如何捕获文件。
  • 我猜您的问题与每次回发时没有完全重新创建您的控制状态有关。当您使用 .NET 控件动态创建页面时,您必须确保每次回发都完全重新创建控件状态。互联网上有很多资源涵盖了这一点,包括这个 SO 帖子,例如:stackoverflow.com/a/3945390/442472。 MSDN 也涵盖了这一点。
  • 如果您不想重新创建控件状态,您也可以检查 Request.Form[] 变量。请参阅 stackoverflow.com/questions/4431407/…stackoverflow.com/questions/1998452/… 了解有关此问题的讨论。
【解决方案2】:

文件上传控件在更新面板中。当我删除更新面板时,控件按预期工作。但是我不太了解更新面板是如何发挥作用的,但是删除它已经解决了我的问题。

【讨论】:

  • 我看到了更新面板和发布文件的奇怪行为。如果可以的话,我会尽量避免将两者混为一谈。
猜你喜欢
  • 1970-01-01
  • 2012-03-29
  • 2014-12-27
  • 2016-10-16
  • 1970-01-01
  • 2017-01-18
  • 1970-01-01
  • 1970-01-01
  • 2020-10-31
相关资源
最近更新 更多