Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 文件上传不';t在带有Ajax更新面板的页面中工作_C#_Asp.net_Updatepanel_Captcha_Asyncfileupload - Fatal编程技术网

C# 文件上传不';t在带有Ajax更新面板的页面中工作

C# 文件上传不';t在带有Ajax更新面板的页面中工作,c#,asp.net,updatepanel,captcha,asyncfileupload,C#,Asp.net,Updatepanel,Captcha,Asyncfileupload,我正在使用c#在ASP.NET 4中使用Ajax文件上载控件。同一页面也有一个更新面板,但上载控件不在更新面板内。上载控件位于更新面板之外 “更新”面板有一个验证码图像和“提交”按钮,该按钮为。内部的submit按钮包含用于从upload控件保存文件的代码 问题是,当用户使用upload control浏览要上载的fife,然后输入错误的captcha值并提交时,将异步向用户提供新的captcha图像以供输入。现在上载控件仍然在上载栏中显示文件的路径,但在编程端,它不会检测文件 提交按钮代码:

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

“更新”面板有一个验证码图像和“提交”按钮,该按钮为。内部的submit按钮包含用于从upload控件保存文件的代码

问题是,当用户使用upload control浏览要上载的fife,然后输入错误的captcha值并提交时,将异步向用户提供新的captcha图像以供输入。现在上载控件仍然在上载栏中显示文件的路径,但在编程端,它不会检测文件

提交按钮代码:

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\u Load
事件中,它仍将在部分回发的上下文中执行,例如
UpdatePanel
刷新。如果未从浏览器执行完整表单提交(您提到您的文件上载在
UpdatePanel
之外),则页面将不会检测到文件上载

我感到困惑的是,当它在
更新面板
之外时,为什么您将其称为
异步文件上传

编辑:

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

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


除非您准备编写代码,在异步响应中将一些javascript发送回页面,以触发完整表单提交,并在表单提交时重新评估CAPTCHA,否则我认为您最好去掉
UpdatePanel

代码不在页面加载事件内。它位于submit按钮的代码中。验证码图像、lblShow和submit按钮位于更新面板内。AsyncFileUpload是我在Ajax工具箱中使用的Ajax文件上传器控件。我想获得这样一种功能,即用户只需上传一次文件,因为这是一个很重的文件,然后如果他输入了错误的captcha值,他可以异步更正它。这样,用户就不必在下次输入catcha值时再次上传文件。删除更新面板就可以了,但是如果用户输入了错误的验证码,并且页面刷新以进行另一次验证码尝试,那么用户将不得不再次从控件上载整个文件。是否有一个解决方法可以异步执行此操作?当然有异步执行此操作的方法。您可以研究使用AJAX文件上传组件。(我相信很多人都有效地使用了iframe。HTML5给了你更多的选择,但没有得到广泛的支持)即使在添加或减去postbacktrigger时,部分回发也会发生得很好。这里存在的问题是我正在丢失文件上传的文件,我正在提交按钮代码中保存该文件。。。。