C# 文件上传上传两次

C# 文件上传上传两次,c#,asp.net,C#,Asp.net,这就是我想做的。使用Ajax AsyncFilepload上载图像时,它还会在图像控件中显示图像。因为上传是异步的,虽然图像上传很好,但它不会显示在图像控件中。因此,根据建议,添加了JS函数。它现在工作正常,但只是由于回发,C代码触发了两次,因此每个图像都上载了两次 另外,为什么ViewState第二次变为null。此页使用母版 JS: function UpdateImage() { __doPostBack("UpdatePanel2",""); } <asp:AsyncFile

这就是我想做的。使用Ajax AsyncFilepload上载图像时,它还会在图像控件中显示图像。因为上传是异步的,虽然图像上传很好,但它不会显示在图像控件中。因此,根据建议,添加了JS函数。它现在工作正常,但只是由于回发,C代码触发了两次,因此每个图像都上载了两次

另外,为什么ViewState第二次变为null。此页使用母版

JS:

function UpdateImage()
{
  __doPostBack("UpdatePanel2","");
}
<asp:AsyncFileUpload ID="fu" runat="server" 
 OnClientUploadComplete="UpdateImage" OnUploadedComplete="fu_UploadedComplete"/>

<asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional">
 <ContentTemplate>
  <asp:Image runat="server" ID="img"/>
 </ContentTemplate>
</asp:UpdatePanel>
protected void fu_UploadedComplete(object sender, 
                                 AjaxControlToolKit.AsyncFileUploadEventArgs e)
{
   if(fu.HasFile && ViewState["vMap"] == null)
    {
      string sNew = getRandomNumber().ToString() + fu.FileName;
      ViewState["vMap"] = sNew;
      sNew = "~/Temp/"+sNew;
      fu.SaveAs(Server.MapPath(sNew));
      img.ImageUrl = sNew;
      UpdatePanel.Update();
    }
}
ASPX:

function UpdateImage()
{
  __doPostBack("UpdatePanel2","");
}
<asp:AsyncFileUpload ID="fu" runat="server" 
 OnClientUploadComplete="UpdateImage" OnUploadedComplete="fu_UploadedComplete"/>

<asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional">
 <ContentTemplate>
  <asp:Image runat="server" ID="img"/>
 </ContentTemplate>
</asp:UpdatePanel>
protected void fu_UploadedComplete(object sender, 
                                 AjaxControlToolKit.AsyncFileUploadEventArgs e)
{
   if(fu.HasFile && ViewState["vMap"] == null)
    {
      string sNew = getRandomNumber().ToString() + fu.FileName;
      ViewState["vMap"] = sNew;
      sNew = "~/Temp/"+sNew;
      fu.SaveAs(Server.MapPath(sNew));
      img.ImageUrl = sNew;
      UpdatePanel.Update();
    }
}

他第一次
文件上载控件的ID为“fu”,您使用的是“fileUpload.HasFile”,这是错误的。
因此,输出是不正确的。我有一些代码,请尝试一下这个。
*头部标签*

    <script type="text/javascript">
            // This function will execute after file uploaded successfully
            function uploadComplete()
             {
                document.getElementById('<%=lblMsg.ClientID %>').innerHTML = "File Uploaded Successfully";
            }
            // This function will execute if file upload fails
            function uploadError() {
                document.getElementById('<%=lblMsg.ClientID %>').innerHTML = "File upload Failed.";
            }
        </script>

编译器没有两次调用您的函数-您的执行计划=您自己构建的逻辑!在
fu#uUploadedComplete
中的C#code中设置一个断点,一旦进入该断点(在每一站),请查看,以查看是谁在调用该函数。我在这里找不到任何内容。名称为“fu#uUploadedComplete(对象发送方,AjaxControlToolKit.AsyncFileUploadeEventArgs)”。此外,为什么ViewState[“vMap”]在第二次访问事件时变为null。@Ruby请查看以下示例,可能会有所帮助@你能告诉我,这和我的问题有什么关系吗。我找不到停止第二次运行的方法。我尝试了来自的所有3种解决方案。如果这个答案有用,请回复。如果没有,请告诉我将尝试其他代码。对不起,这没有帮助。我不想显示状态消息。我需要做的是找到一种方法停止第二次触发C代码。