我正在使用此函数循环两个文件类型的输入控件。
protected void btnUpload_Click(object sender, EventArgs e)
{
HttpFileCollection hfc = Request.Files;
int numFiles = hfc.Count;
for (int i = 0; i < hfc.Count; i++)
{
HttpPostedFile hpf = hfc[i];
string FilePath = hpf.FileName;
CreateProgress(FilePath, i + 1, numFiles);
Thread.Sleep(2000);
}
}
在这个阶段我对文件什么都不做,我只是想证明在上传每个文件后我可以在浏览器中写一些东西让用户知道文件正在被上传。函数 CreateProgress 是这样的:
public void CreateProgress(string FilePath, int i, int numFiles)
{
StringBuilder sbProgress = new StringBuilder();
string strTableId = "mainTable" + i;
sbProgress.Append("<html><head><link rel=\"StyleSheet\" href=\"stylesheet/StyleSheet1.css\" type=\"text/css\" /></head><body>");
sbProgress.Append("<table id=\"" + strTableId + "\" border=\"0\">");
sbProgress.Append("<tr>");
sbProgress.Append("<td>");
sbProgress.Append("<p class=\"filey\">Uploading " + FilePath + " ..... file " + i.ToString() + " of " + numFiles.ToString() + "</p>");
sbProgress.Append("</td>");
sbProgress.Append("<td style=\"display:none\">");
sbProgress.Append("</td>");
sbProgress.Append("</tr>");
sbProgress.Append("</table>");
sbProgress.Append("</body></html>");
HttpContext.Current.Response.Write(sbProgress.ToString());
HttpContext.Current.Response.Flush();
}
上面的代码每次都能完美运行。我点击上传文件并在屏幕上显示“上传 SomeFile.txt ... 文件 1 of 2” 2 秒,然后“上传 SomeOtherFile.txt ... 文件 2 of 2” 2 秒。
但是,您将在构建 StringBuilder 的代码中看到我正在构建一个包含一行和两个单元格的表。我不需要或使用该行中的第二个单元格,但是如果我通过注释掉这样的三行来删除它...
public void CreateProgress(string FilePath, int i, int numFiles)
{
StringBuilder sbProgress = new StringBuilder();
string strTableId = "mainTable" + i;
sbProgress.Append("<html><head><link rel=\"StyleSheet\" href=\"stylesheet/StyleSheet1.css\" type=\"text/css\" /></head><body>");
sbProgress.Append("<table id=\"" + strTableId + "\" border=\"0\">");
sbProgress.Append("<tr>");
sbProgress.Append("<td>");
sbProgress.Append("<p class=\"filey\">Uploading " + FilePath + " ..... file " + i.ToString() + " of " + numFiles.ToString() + "</p>");
//sbProgress.Append("</td>");
//sbProgress.Append("<td style=\"display:none\">");
//sbProgress.Append("</td>");
sbProgress.Append("</tr>");
sbProgress.Append("</table>");
sbProgress.Append("</body></html>");
HttpContext.Current.Response.Write(sbProgress.ToString());
HttpContext.Current.Response.Flush();
}
...然后,当单击“上传”按钮时 - 一开始没有任何反应,然后屏幕上显示第二条消息(上传文件 2 of 2)。为什么在地球上注释掉三行以便不创建行中的第二个单元格会导致它停止正常工作?
事实上,如果我保留 3 行并从 td 标记中删除 'style="display:none"' - 它无法正常工作。把 style="display:none" 放回去,它工作正常。
实际上,我根本不想真正创建一个表。我试过删除很多并简单地这样做:
StringBuilder sbProgress = new StringBuilder();
sbProgress.Append("<html><head><link rel=\"StyleSheet\" href=\"stylesheet/StyleSheet1.css\" type=\"text/css\" /></head><body>");
sbProgress.Append("<p class=\"filey\">Uploading " + FilePath + " ..... file " + i.ToString() + " of " + numFiles.ToString() + "</p>");
sbProgress.Append("</body></html>");
HttpContext.Current.Response.Write(sbProgress.ToString());
HttpContext.Current.Response.Flush();
}
但这也不起作用。第一条消息“上传文件 1 的 2”没有出现,但第二条消息(“上传文件 2 的 2”)确实出现。
有任何想法吗?我想成为一名出租车司机。