我使用c#在ASP.NET 4中使用Ajax文件上载控件。同一页面也有更新面板,但上传控件不在更新面板内。上传控件位于更新面板之外。
更新面板有一个验证码图像和提交按钮described here too。里面的提交按钮包含用于从上传控制中保存文件的代码。
问题在于,当用户浏览使用上传控件上传的笛子,然后输入错误的验证码值并提交时,则会向用户异步提供新的验证码图像以供输入。现在上传控件仍然显示文件上传栏中的路径,但在编程方面它不会检测到文件。
提交按钮代码:
if (AsyncFileUpload.HasFile)
{
// upload logic and other stuff
}
else
{
// lblShow.Text = "There is no file to be uploaded";
}
上面的代码例如执行else部分说“没有要上传的文件”。页面仍然没有完全刷新,文件上传控件具有显示文件的路径。请帮我解决这个问题。
答案 0 :(得分:0)
如果您正在使用带文件上载控件的Ajax更新面板,则必须将回发触发器添加到更新面板触发器中。像:
<Triggers>
<asp:PostBackTrigger ControlID="btnContactSubmit"/>
</Triggers>
答案 1 :(得分:0)
如果您的代码:
if (AsyncFileUpload.HasFile)
{
// upload logic and other stuff
}
else
{
// lblShow.Text = "There is no file to be uploaded";
}
在Page_Load
事件中,它仍然会在部分回发的情况下执行,例如UpdatePanel
刷新。{1}}如果尚未从浏览器执行完整表单提交(您提到文件上载位于UpdatePanel
之外),则页面将不会检测到文件上载。
我感到困惑的是,当AsyncFileUpload
超出UpdatePanel
时,为什么要将其称为UpdatePanel
?
修改强>
根据您的回答,我认为您的Captcha实现不能像现在一样使用异步文件上传。
UpdatePanel执行异步POST以评估验证码结果,但您不会发布文件内容,因为它不在UpdatePanel内。然后你的服务器端代码评估验证码结果,并将异步响应中的html或重定向返回给浏览器......你需要最终提交表单以获取文件。
除非您准备编写代码以在异步响应中将一些javascript发送回您的页面以触发完整表单提交,并在表单提交上再次重新评估CAPTCHA,否则您可能最好取出在我看来{{1}}。