0

我正在使用 c# 在 ASP.NET 4 中使用 Ajax 文件上传控件。同一页面也有一个更新面板,但上传控件不在更新面板内。上传控件位于更新面板之外。

更新面板有一个验证码图片和提交按钮,这里也有描述。里面的提交按钮包含从上传控件保存文件的代码。

问题是当用户使用上传控件浏览了要上传的文件,然后输入错误的验证码值并提交时,会异步给用户一个新的验证码图片供输入。现在上传控件仍然在上传栏中显示文件的路径,但在编程方面它没有检测到文件。

提交按钮代码:

if (AsyncFileUpload.HasFile)
{
  // upload logic and other stuff
}
else
{
  // lblShow.Text = "There is no file to be uploaded";
}

上面的代码例如执行 else 部分说“没有要上传的文件”。页面还没有完全刷新,文件上传控件显示了文件的路径。请帮我解决这个问题。

4

2 回答 2

0

如果您使用带有文件上传控件的 Ajax 更新面板,那么您必须将回发触发器添加到更新面板触发器中。像:

<Triggers>
        <asp:PostBackTrigger ControlID="btnContactSubmit"/>                                                         
</Triggers>
于 2011-09-05T08:22:30.233 回答
0

如果您的代码:

if (AsyncFileUpload.HasFile)
{
  // upload logic and other stuff
}
else
{
  // lblShow.Text = "There is no file to be uploaded";
}

在这种Page_Load情况下,它仍将在部分回发的上下文中执行,例如UpdatePanel刷新。如果尚未从浏览器执行完整的表单提交(您提到您的文件上传在 之外UpdatePanel),则该页面将不会检测到文件上传。

我感到困惑的是为什么你AsyncFileUpload在它外面的时候调用它UpdatePanel

编辑:

根据您的回答,我认为您的验证码实现不适用于您现在拥有的异步文件上传。

UpdatePanel 执行异步 POST 以评估验证码结果,但您不会 POST 文件内容,因为它不在 UpdatePanel 内。然后,您的服务器端代码评估验证码结果,并将异步响应中的 html 或重定向返回到浏览器......您最终需要在某个地方提交表单以获取文件。

除非您准备编写代码以在异步响应中将一些 javascript 发送回您的页面以触发完整的表单提交,并在表单提交时再次重新评估 CAPTCHA,否则您最好取出UpdatePanel, in我的意见。

于 2011-09-05T08:23:38.230 回答