この関数を使用して、ファイルタイプの2つの入力コントロールをループしています。
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();
}
上記のコードは毎回完全に機能します。クリックしてファイルをアップロードすると、画面に「Uploading SomeFile.txt ... file 1 of 2」が2秒間表示され、次に「Uploading SomeOtherFile.txt ... file 2of2」が2秒間表示されます。
ただし、StringBuilderを構築するコードで、1つの行と2つのセルを持つテーブルを構築していることがわかります。行の2番目のセルは必要ないか使用しませんが、このように3行をコメントアウトして削除すると...
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番目のメッセージが画面に表示されます(ファイル2/2のアップロード)。行の2番目のセルが作成されないように、いったいなぜ3行をコメントアウトすると、正しく機能しなくなるのでしょうか。
実際、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();
}
しかし、これも機能しません。最初のメッセージ「Uploadingfile1of 2」は表示されませんが、2番目のメッセージ(「Uploadingfile 2 of2」)は表示されます。
何か案は?タクシーの運転手になることを考えています。