私は非常に奇妙な問題に直面しており、それを置く方法がわかりません。しかし、自分のレベルでベストを尽くします。
ファイルアップロードコントロールで構成されるグリッドビューがあり、Update イベントが呼び出されるとファイルが DB に保存されます。ファイルのアップロード コードは、更新ボタンがクリックされるとすぐに呼び出される関数として記述されています。
更新をクリックすると、DB でファイルが更新されますが、ページが無限ループに入り、何かが処理されているように見えます。しばらくすると、アップロードされたドキュメントの形式で Web ページ全体をダウンロードするオプションが表示されるダイアログ ボックスが表示されます (理由がわからない、このダイアログ ボックスがどのように表示されるか)。コードを何百回もチェックしましたが、まだ問題を見つけることができません。
どんな解決策も歓迎されます。前もって感謝します。
アップロード ドキュメントのコード
rotected void UploadDoc(object sender, EventArgs e)
{
int i = 0;
foreach (GridViewRow row in GVTaskCompDept.Rows)
{
if ((row.RowState & DataControlRowState.Edit) > 0)
{
FileUpload FU = (FileUpload)GVTaskCompDept.Rows[i].Cells[8].FindControl("FileUpload1");
string filePath = FU.PostedFile.FileName;
string filename = Path.GetFileName(filePath);
if (filePath != null && filePath != "")
{
FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fs);
Byte[] bytes = br.ReadBytes((Int32)fs.Length);
br.Close();
fs.Close();
string ext = System.IO.Path.GetExtension(FU.FileName).TrimStart(".".ToCharArray()).ToLower();
string name = System.IO.Path.GetFileName(FU.FileName);
// string ContentType = "";
if (ext == "doc" || ext == "docx")
ContentType = "application/vnd.ms-word";
else if (ext == "xlx" || ext == "xlsx" || ext == "xls")
ContentType = "application/vnd.ms-excel";
else if (ext == "jpeg" || ext == "jpeg")
ContentType = "image/jpeg";
else if (ext == "pdf")
ContentType = "application/pdf";
(Session)["Data"] = bytes;
(Session)["Name"] = name;
(Session)["Type"] = ContentType;
}
else
{
(Session)["Data"] = null;
(Session)["Name"] = null;
(Session)["Type"] = null;
}
}
i += 1;
}
}
RowUpdating イベントは次のようになります
protected void GVTaskCompDept_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
GridViewRow gvrow = GVTaskCompDept.Rows[e.RowIndex];
Session["rowindex"] = e.RowIndex;
UploadDoc(null, null);
//---Some Code-----//
{
DSTaskCompliance.UpdateParameters["UploadDocTitle"].DefaultValue = (Session)["Name"].ToString();
DSTaskCompliance.UpdateParameters["UploadDocType"].DefaultValue = (Session["Type"]).ToString();
}
//-------Some Code---------//
DSTaskCompliance.Update();
DSTaskCompliance.DataBind();
}
DataSource Updating Event で、セッション変数をコードの他の部分と一緒に渡して、DB に更新します
protected void DSTaskCompliance_Updating(object sender, SqlDataSourceCommandEventArgs e)
{
e.Command.Parameters["@UploadDocContent"].Value = Session["Data"];
}