1

我的imageuplad使用AjaxControlToolKit時遇到問題。 我可以上傳文件並顯示它們而無需回傳,但如果用戶改變了主意並上傳了另一張圖片,它仍然會顯示第一張圖片。請大家諒解。ImageUpload(AjaxControlToolKit和AsyncFileUpload)的問題

這是我的代碼: 前:

<%@ Register TagPrefix="asp" Namespace="AjaxControlToolkit" Assembly="AjaxControlToolkit" %> 

    <script type="text/javascript"> 
     function uploadComplete(sender, args) { 
      var pathForUploadedImage = $('#uploadedHiddenField').val();        
      $get("uploadImageImg").src = $('#uploadedHiddenField').val(); 
      $(".uploadImage").fadeIn(100); 

     } 
</script> 

<asp:Image id="uploadImageImg" class="uploadImage" alt="" runat="server" ClientIDMode="Static" /> 
<div id="uploadedImageDiv"></div> 
<asp:Image ID="loader" runat="server" ImageUrl="~/library/images/loading.gif" Style="display: None" /> 
<asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server" /> 
<asp:AsyncFileUpload ID="AsyncFileUpload1" runat="server" OnClientUploadComplete="uploadComplete" OnUploadedComplete="AsyncFileUpload1_UploadedComplete" CompleteBackColor="white" /> 
<asp:HiddenField ID="uploadedHiddenField" ClientIDMode="Static" runat="server"/> 

回來:

protected void AsyncFileUpload1_UploadedComplete(object sender, AjaxControlToolkit.AsyncFileUploadEventArgs e) 
    { 

     try 
     { 

      Styling.SetupStyles(); 
      string virualFolder = ""; 
      if (string.IsNullOrEmpty(UploadDirectory)) 
      { 
       virualFolder = "/" + Styling.GetStyleValue("customNewsImagesFolder", "") + "/"; 
      } 
      else 
      { 
       virualFolder = "/" + Styling.GetStyleValue(UploadDirectory, "") + "/"; 
      } 



      string fileExtension = Path.GetExtension(e.FileName); 

      int fileSize = Convert.ToInt32(e.FileSize); 

      string physicalFolder = Server.MapPath(virualFolder); 

      string randomFileName = System.IO.Path.GetRandomFileName().Replace(".", ""); 

      bool isUnique = true; 
      DirectoryInfo dir = new DirectoryInfo(MapPath(virualFolder)); 
      FileInfo[] files = dir.GetFiles(); 
      foreach (FileInfo myFile in files) 
      { 
       if (myFile.Name == randomFileName) 
       { 
        isUnique = false; 
       } 
      } 

      IsAllowedFileExtension(fileExtension); 

      bool error = false; 

      if (!isUnique) 
      { 
       error = true; 
       ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "tmp", "<script type='text/javascript'>alert('En fil med detta namn finns redan, var vänlig och döp om din fil');</script>", false); 
      } 
      else if (!IsAllowedMaxFileSize(fileSize)) 
      { 
       error = true; 
       ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "tmp", "<script type='text/javascript'>alert('Filen är för stor, vänligen försök igen med en fil som är mindre än 2 MB');</script>", false); 
      } 
      else if (!IsAllowedFileExtension(fileExtension)) 
      { 
       error = true; 
       ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "tmp", "<script type='text/javascript'>alert('Felaktigt filformat, vänligen försök igen med en fil av följande typ: .jpg .jpeg .png .gif');</script>", false); 
      } 

      if (!error) 
      { 
       AsyncFileUpload1.SaveAs(physicalFolder + randomFileName + fileExtension); 
       string thePath = (virualFolder + randomFileName + fileExtension).Replace("\\", "/"); 

       ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "filePath", "top.$get(\"" + uploadedHiddenField.ClientID + "\").value = '" + thePath + "';", true);     

      } 
     } 
     catch (Exception ex) 
     { 
      erLog.LogException(ex, System.Reflection.MethodBase.GetCurrentMethod().Name); 
     } 
    } 

    private bool IsAllowedFileExtension(string fileExtension) 
    { 
     bool valid = false; 
     if (fileExtension.ToLower() == ".jpg" || fileExtension.ToLower() == ".jpeg" || fileExtension.ToLower() == ".gif" || fileExtension.ToLower() == ".png") 
      valid = true; 
     return valid; 
    } 

    private bool IsAllowedMaxFileSize(int fileSize) 
    { 
     bool valid = false; 
     if (fileSize < 2100000) 
      valid = true; 
     return valid; 
    } 

我認爲這個問題必須做與我顯示與「ScriptManager.RegisterClientScriptBlock圖像「-row,但它似乎沒有註冊腳本,如果它已經在DOM中。

回答

2

您沒有指定您的AsyncFileUpload1_UploadedComplete事件處理程序是否在控件或頁面內。如果它在控制範圍內而不是解決問題,則可以嘗試使用頁面實例註冊客戶端腳本。其他選項是每個部分回發生成唯一的腳本ID。

選項1(以頁面實例註冊客戶端腳本):

ScriptManager.RegisterClientScriptBlock(this, this.Page, "filePath", "top.$get(\"" + uploadedHiddenField.ClientID + "\").value = '" + thePath + "';", true); 

選項2(產生獨特的腳本ID每個局部回傳):

ScriptManager.RegisterClientScriptBlock(this, this.GetType(), Guid.NewGuid().ToString(), "top.$get(\"" + uploadedHiddenField.ClientID + "\").value = '" + thePath + "';", true); 
+0

你是最棒的!非常感謝,挽救了我的一天(是的,代碼是在控制之下) – WIRN

相關問題