GridView中更新事件后的无限循环
本文关键字:无限循环 事件 更新 GridView | 更新日期: 2023-09-27 17:51:08
我正面临一个很奇怪的问题,不知道该怎么说。但我会尽我最大的努力。
我有一个网格视图,其中包括文件上传控制和文件存储在数据库时,更新事件被调用。文件上传代码被编写为一个函数,它在点击更新按钮时被调用。
现在一切都很好,就像当我点击更新,文件在数据库中得到更新,但页面进入无限循环,似乎有些东西正在处理。过了一段时间,一个对话框出现在其中,我得到一个选项下载整个网页的格式文件上传(不知道为什么,这个对话框是如何出现的),但仍然是在循环和正在处理的页面。我已经检查了我的代码像几百次,但仍然无法找到问题。
欢迎任何解决方案。提前谢谢。
上传文件代码
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 Event类似
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"];
}
这样的代码没有意义。无论如何,UploadDoc
代码最有可能在以下行抛出异常:
FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
filePath是客户端路径(在非IE浏览器中仅为文件名),尝试在服务器上打开在生产场景中注定会失败。它可能在开发环境中工作,客户端/服务器都是同一台机器。
就您的具体问题而言,我怀疑是在页面的另一部分-您在页面内是否有任何代码试图显示/下载上传的文档?显然,您是否尝试过通过在visual studio等中设置断点来调试该问题
最后,我终于找到了解决问题的办法。这只是一个小错误。在上面的代码中,我指定了"ContentType"是特定的,当一个特定类型的文件被上传。例如:对于word文件,它是application/vnd.ms-word。
没有必要指定这个,因为我发现代码自己查找类型并在DB中存储相同的类型。我不需要。由于指定为应用程序,它总是倾向于以上传的格式下载文件。
非常感谢您的支持!!!!!:)