【发布时间】:2021-12-11 01:34:54
【问题描述】:
我一直在努力调试我在使用 AJAXFileUpload 时遇到的间歇性问题。我正在将我们的代码从另一个上传者那里移开,并且已经将它处理成几个页面。我已经意识到上传者在完成仅用于图像的代码隐藏中的 UploadComplete 代码后重新加载页面。我可以毫无问题地上传 .pdf、.docx,但只要我尝试 .png、.jpeg、.gif 等,页面就会在上传后立即重新加载。
我找不到任何表明这两种文件之间的行为应该不同的东西,我假设我遗漏了一些东西。
这是我的上传控件:
<ajax:AjaxFileUpload AutoStartUpload="true" OnClientUploadCompleteAll="() => $('#btnSaveThumbnails').toggle()" ClientIDMode="Static" style="max-width:800px;display:none" runat="server" ID="thumbUploader" />
这里是 UploadComplete 函数的代码隐藏:
If Not System.IO.Directory.Exists(tempFilePath) Then
System.IO.Directory.CreateDirectory(tempFilePath)
End If
sender.SaveAs(tempFilePath & e.FileName)
Session("docUploaderFiles") = If(Session("docUploaderFiles"), New List(Of String))
CType(Session("docUploaderFiles"), List(Of String)).Add(e.FileName)
正如我所提到的,根据我的经验,这些对于非图像文件类型的工作方式完全符合预期。
更新:我已将其缩小为由代码隐藏中的 .SaveAs 调用引起的。仅删除该行不会导致页面重新加载。
更新:我发现这个问题是我的机器特有的。上传器适用于其他本地环境以及我们的生产应用程序。可能与我的 IIS 有关。
【问题讨论】:
-
当您的 btnSaveThumbs 发生“全部完成”事件时,您使用按钮单击/切换,我怀疑当所有文件完成后会导致最终回发。所以看起来你最后的“全部”事件做了一个回发(这通常是需要的)。所以从我目前所见,上传每个文件事件不会导致回发,但最终的上传“全部”完成事件是(正如我所指出的,这是一个常见的设置)。所以,我会检查所有完成的事件代码——因为它看起来像是回发的来源。所以每个文件事件都会触发,然后最终的“所有事件”会为最终事件触发,回发应该无关紧要
-
@AlbertD.Kallal 它实际上是导致整个页面加载而不是回发,正如我在调试中的一些断点所证实的那样。对我来说最大的谜团是,这种行为不存在于 .doc、.pdf、.xlsx(我敢肯定其他扩展名),但仅适用于图像文件(.png、.jpeg、.gif 测试)。跨度>
-
将 png、jpeg 等放入允许的文件类型中。可能是页面/脚本错误?同意这没有意义。上传后是否显示缩略图或有关该文件的其他内容?或者只是文件被上传?我经常使用该控件-甚至对其进行了修改以允许为每个事件传递值(因此我不必使用会话)。那么,在最后的“all”活动中有特价代码吗?
-
感谢您的回复。我之前尝试过允许的文件类型,但现在又一次没有成功。在我的 JS 控制台中看不到任何内容。我没有对页面上的图像做任何其他事情。没有前端或后端“所有”事件。我也在具有相同体验的多个页面上使用相同的实现。
-
我会创建一个测试页面并放入文件上传器。如果必须,硬编码另存为文件名 - 但请尝试测试页面并查看是否发生这种情况。请记住,如果 3 个服务器端事件中的任何一个有错误 - 那么这也可能是问题所在。所以,我会建立一个快速测试页面——看看它是否有效。我会自己尝试一个测试页面,因为我只上传过 pdf 和 zip 文件。但我无法想象为什么 png/jpeg 会成为问题?也许您在该站点上有一个用于 jpeg 文件的自定义 http 处理程序 - 但即便如此,这也不重要。
标签: asp.net vb.net ajaxcontroltoolkit