我正面临一个非常奇怪的问题而且不知道该怎么做。但会尽我所能。
我有一个网格视图,它包含文件上传控件,当调用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();
}
现在在DataSource更新事件中,我将会话变量与其他部分代码一起传递给DB
protected void DSTaskCompliance_Updating(object sender, SqlDataSourceCommandEventArgs e)
{
e.Command.Parameters["@UploadDocContent"].Value = Session["Data"];
}
答案 0 :(得分:0)
你这样的代码没有意义。无论如何,UploadDoc
代码最有可能在下面的行中引发异常:
FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
filePath是客户端路径(在非IE浏览器中只是文件名),并且尝试在服务器上打开在生产方案中必然会失败。它可能在dev环境中工作,其中客户端/服务器都是同一台机器。
就您的具体问题而言,我怀疑是在页面的另一部分 - 您是否在页面中有任何代码试图显示/下载上传的文档?显然,您是否尝试通过在visual studio等中设置断点来调试问题
答案 1 :(得分:0)
最后,最后我可以找到解决问题的方法。这只是一个小错误。在上面的代码中,我指定了'ContentType',以便在上传特定类型的文件时具体。例如:对于word文件,它是application / vnd.ms-word。
没有必要指定这个,因为我发现代码自己找到类型并将其存储在DB中。我不需要。由于将其指定为应用程序,它总是倾向于以上载的格式下载文件。
非常感谢您的支持!!!!! :)