繁体   English   中英

文件上载在Ajax更新面板的页面中不起作用

[英]File Upload doesn't work in a page with Ajax Update Panel

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

更新面板上有一个验证码图片和一个提交按钮, 这里也介绍 内部的“提交”按钮包含用于从上传控件保存文件的代码。

问题是,当用户使用上载控件浏览了要上传的文件名,然后输入了错误的验证码值并提交时,新的验证码图像会异步地提供给用户以供输入。 现在,上载控件仍在文件的上载栏中显示路径,但是在编程端它无法检测到文件。

提交按钮代码:

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

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

如果将Ajax更新面板与文件上传控制一起使用,则必须将回发触发器添加到更新面板触发器中。 喜欢:

<Triggers>
        <asp:PostBackTrigger ControlID="btnContactSubmit"/>                                                         
</Triggers>

如果您的代码:

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

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

我感到困惑的是,为什么在UpdatePanel之外将其称为AsyncFileUpload

编辑:

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

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

除非您准备编写代码以在异步响应中将一些javascript发送回您的页面以触发完整的表单提交,并且再次对表单提交重新评估验证码,否则最好删除UpdatePanel ,在我看来。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM