2016-01-21 57 views
0

我在UpdatePanel內使用輸入文件,它工作得很好。但使用UpdatePanel PostBackTrigger,ScriptManager.RegisterStartupScript不起作用。輸入文件裏面updatepanel和回發觸發器asp

如果我不使用PostBackTrigger,ScriptManager.RegisterStartupScript可以工作,但輸入文件不會。

我使用ASP Web窗體與C#

這裏的源代碼。

的.aspx:使用asp.net文件上傳控制

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="UploadFile.aspx.cs" Inherits="WebApplication1.UploadFile" %> 

<!DOCTYPE html> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager> 
    <asp:UpdatePanel ID="up_upload" runat="server" UpdateMode="Conditional"> 
     <Triggers> 
      <asp:PostBackTrigger ControlID="btn_upload" /> 
     </Triggers> 
     <ContentTemplate> 
      <input type="file" id="file_test" runat="server" /> 
      <asp:Button ID="btn_upload" runat="server" Text="Subir" CausesValidation="False" OnClick="btn_upload_Click" /> 
     </ContentTemplate> 
    </asp:UpdatePanel> 
    </form> 
</body> 
</html> 

的.cs

protected void btn_upload_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     string message = "file not uploaded!"; 
     if (file_test.PostedFile != null) 
     { 
      string fn = file_test.PostedFile.FileName; 
      string only_path = Server.MapPath("."); 

      file_test.PostedFile.SaveAs(only_path + "//Images//" + fn); 

      ScriptManager.RegisterStartupScript(up_upload, up_upload.GetType(), Guid.NewGuid().ToString(), "alert('server path: ' + '" + only_path.Replace("\\", "\\\\") + "');", true); 
      message = "file uploaded!"; 

     } 

     ScriptManager.RegisterStartupScript(up_upload, up_upload.GetType(), Guid.NewGuid().ToString(), "alert('" + message + "');", true); 

     up_upload.Update(); 
    } 
    catch (Exception ex) 
    { 
     ScriptManager.RegisterStartupScript(up_upload, up_upload.GetType(), Guid.NewGuid().ToString(), "alert('" + ex.Message + "');", true); 
    } 
} 
+1

歡迎來到SO,請問一下問題:你有什麼試過,你期望什麼等等。請參閱[如何提問](http://stackoverflow.com/help/how-to-問) – Nehal

+0

我需要發回給客戶端一個javasript函數來顯示文件上傳後的消息,但由於某種原因,RegisterStartupScript與UpdatePanel觸發器不兼容。 – user3787571

回答

0

的FileUpload總是需要整頁回發請求。

這是所有AJAX框架中用於異步調用應用程序的XmlHttpRequest組件的限制。 我建議你兩個解決方案:

  1. 給一整頁回發(**即不使用的UpdatePanel文件上傳)
  2. 如果希望有一個完整的回傳,嘗試其他解決方案如Dropzone文件上傳器插件用於上傳文件。當我想要一個很酷的文件上傳界面時,我總是使用它。這是非常容易使用 。請參閱其文檔以瞭解其用途,或者嘗試使用this鏈接進行學習。

相信我,這很容易。

+0

謝謝你的回答。我願意發一個完整的帖子來上傳文件。有沒有辦法發送JavaScript代碼到客戶端做一個完整的頁面回發? – user3787571

0

解決!我使用ClientScript.RegisterStartupScript而不是ScriptManager.RegisterstartupScript發佈整頁郵件時。

ClientScript.RegisterStartupScript(up_upload.GetType(), 
Guid.NewGuid().ToString(), "<script>alert('" + message + "');</script>"); 

感謝您的幫助!