FileUpload.HasFile始终显示为false
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。
我错过了什么吗?
您是否尝试更新<form runat="server"
以包含enctype="multipart/form-data"
?
没有它,奇怪的事情可能会发生!
雅...我做到了,但发生了什么事情是当我点击提交按钮,页面回来后,控制再次被创建。在这个过程中,选择的文件丢失了。页面加载事件首先发生,然后点击事件..我不知道如何捕捉文件。 – codewarrior 2013-04-27 05:22:53
我猜你的问题与每次回发没有完全重新建立你的控制状态有关。当您使用.NET控件动态创建页面时,必须确保在每次回发时完全重新创建控件状态。互联网上有很多资源可以涵盖此内容,包括此SO帖子,例如:http://stackoverflow.com/a/3945390/442472。 MSDN也涵盖了这一点。 – 2013-04-29 02:41:26
如果你不想重新创建控制状态,你也可以检查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
文件上传控件位于更新面板中。当我删除更新面板时,控件按预测工作。但我知道更新面板如何起作用,但删除它已解决了我的问题。
我已经看到更新面板和发布文件的奇怪行为。如果可以的话,我尽量避免混合两者。 – Tim 2013-05-02 20:24:16
你是否实例化了你的新文件上传控件?正如我在你的代码中看到的,你只通过'fuUploadPurchaseOrder.ID =“Purchase”;'来声明它的id,但没有实例化。 – KevinIsNowOnline 2013-04-27 02:20:56
谢谢..我实例化所有的文件上传控件 – codewarrior 2013-04-27 02:35:46
我实例化所有控件外的Page_load ... – codewarrior 2013-04-27 02:40:52