2013-04-27 140 views
1

Iam通過以下代碼動態加載三個文件上傳控件。FileUpload.HasFile始終顯示爲false

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。

我錯過了什麼嗎?

+0

你是否實例化了你的新文件上傳控件?正如我在你的代碼中看到的,你只通過'fuUploadPurchaseOrder.ID =「Purchase」;'來聲明它的id,但沒有實例化。 – KevinIsNowOnline 2013-04-27 02:20:56

+0

謝謝..我實例化所有的文件上傳控件 – codewarrior 2013-04-27 02:35:46

+0

我實例化所有控件外的Page_load ... – codewarrior 2013-04-27 02:40:52

回答

1

您是否嘗試更新<form runat="server"以包含enctype="multipart/form-data"

沒有它,奇怪的事情可能會發生!

+0

雅...我做到了,但發生了什麼事情是當我點擊提交按鈕,頁面回來後,控制再次被創建。在這個過程中,選擇的文件丟失了。頁面加載事件首先發生,然後點擊事件..我不知道如何捕捉文件。 – codewarrior 2013-04-27 05:22:53

+0

我猜你的問題與每次回發沒有完全重新建立你的控制狀態有關。當您使用.NET控件動態創建頁面時,必須確保在每次回發時完全重新創建控件狀態。互聯網上有很多資源可以涵蓋此內容,包括此SO帖子,例如:http://stackoverflow.com/a/3945390/442472。 MSDN也涵蓋了這一點。 – 2013-04-29 02:41:26

+0

如果你不想重新創建控制狀態,你也可以檢查Request.Form []變量。請參閱http://stackoverflow.com/questions/4431407/get-file-upload-data-from-post-data-in-asp-net或http://stackoverflow.com/questions/1998452/accessing-input-type文件在服務器端在asp網絡的討論。 – 2013-04-29 12:35:30

0

文件上傳控件位於更新面板中。當我刪除更新面板時,控件按預測工作。但我知道更新面板如何起作用,但刪除它已解決了我的問題。

+0

我已經看到更新面板和發佈文件的奇怪行爲。如果可以的話,我儘量避免混合兩者。 – Tim 2013-05-02 20:24:16