我面临一个非常奇怪的问题,不知道该怎么说。但会尽力而为。
我有一个网格视图,其中包含文件上传控件,并且在调用 Update 事件时文件存储在 DB 中。文件上传代码被编写为一个函数,一旦单击更新按钮就会调用该函数。
现在一切都很好,就像当我单击更新时,文件在数据库中更新,但页面进入无限循环,似乎正在处理某些内容。一段时间后,会出现一个对话框,在其中我可以选择下载格式文档中的整个网页已上传(不知道为什么,此对话框如何出现),但页面仍在循环中并正在处理中。我已经检查了我的代码一百次,但仍然找不到问题。
任何解决方案都将受到欢迎。提前致谢。
上传文件代码
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();
}
现在在数据源更新事件中,我将会话变量与其他代码部分一起传递以将其更新到数据库中
protected void DSTaskCompliance_Updating(object sender, SqlDataSourceCommandEventArgs e)
{
e.Command.Parameters["@UploadDocContent"].Value = Session["Data"];
}