2013-08-19 29 views
1

這就是我想要的.. 我通過FileUpload Control上傳圖片..但是當我觸發updatepanel Fileupload控件顯示它是空的..我不知道「知道爲什麼..Asp.NET UpdatePanel沒有按預期工作

,這裏是什麼,我需要..

我需要更新我的UpdatePanel只有當我點擊上傳按鈕和其他然後,我不希望更新其內容。在我的編碼中我需要做什麼變化

下面是ASPX代碼..

<form id="form1" runat="server"> 
     <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true"/> 
    <div> 


      <fieldset style="width:50%; margin-left:300px"> 
      <legend>Upload Files</legend> 
       <asp:FileUpload runat="server" ID="UploadImages" style="background-color:white; position:relative; font-family:'Palatino Linotype'; font-size:medium" Width="500px" AllowMultiple="true"/> 
       <asp:Button runat="server" ID="uploadedFile" style="position:relative; font-family:'Palatino Linotype'; font-size:medium; width: 112px; height: 29px;" Text="Upload" OnClick="uploadFile_Click" /> 
      </fieldset> 


    <div id="back" runat="server" class="transbox" style="width:100%;height:100%;left:0px;top:0px;position:absolute" Visible="false"> 
    <asp:UpdatePanel ID="updtpanel" runat="server" UpdateMode="Conditional" style="width:100%;height:100%;left:0px;top:0px;position:absolute"> 
      <ContentTemplate> 
       <asp:Button ID="btnsave" runat="server" UseSubmitBehavior="true" Text="Find Images" OnClick="btnsave_Click" Font-Bold="true" style="position:absolute" BackColor="Yellow"></asp:Button>--%> 
      </ContentTemplate> 
      <Triggers> 
       <asp:AsyncPostBackTrigger ControlID="uploadedFile" EventName="Click"/> 
      </Triggers> 
     </asp:UpdatePanel> 

    </div> 

    </div> 
    </form> 

這裏是文件上傳的的.cs代碼..

protected void uploadFile_Click(object sender, EventArgs e) 
    { 

     if (UploadImages.HasFiles) 
     { 

      string fileExt = Path.GetExtension(UploadImages.FileName).ToLower(); 
      if (fileExt == ".jpeg" || fileExt == ".png" || fileExt == ".jpg" || fileExt == ".bmp") 
      { 
       foreach (HttpPostedFile uploadedFile in UploadImages.PostedFiles) 
       { 
        count1 += 1; 
       } 

       foreach(HttpPostedFile uploadedFile in UploadImages.PostedFiles) 
       { 
        count += 1; 

        filepath = Server.MapPath("~/Images/" + uploadedFile.FileName); 
        uploadedFile.SaveAs(filepath); 
        newpath = "../Images/" + uploadedFile.FileName; 
        try 
        { 
         createImgPanel(); 
         Image nimg = Page.FindControl("img" + count) as Image; 
         nimg.ImageUrl = newpath.ToString(); 

         Page.ClientScript.RegisterStartupScript(GetType(), "msgbox", "alert('Files Uploaded!!');", true); 

        } 

        catch (Exception ex) 
        { 
         Response.Write(ex.Message); 
        } 

       } 
      } 
      else 

      { 
       Page.ClientScript.RegisterStartupScript(GetType(), "msgbox", "alert('Please Select only Image Files!!');", true); 
      } 

     } 
     else 
     { 
      Page.ClientScript.RegisterStartupScript(GetType(), "msgbox", "alert('Please Select a File First!!');", true); 
     } 
    } 

如果我評論的觸發UpdatePanel的uploadFile.HasImages將工作..但如果我取消它它會直接降落在請選擇一個文件第一錯誤味精..在代碼中我犯什麼錯誤..

回答

3

updatepanel是後立即觸發回傳10控件點擊所以發生的是選擇的文件立即和那個第一個請求一起回發。當您通過點擊按鈕提交第二個請求時,UploadFile控件再次爲空。 UploadFile控件(或任何input:file元素)在回發後不會保留選定的值。你看到的是設計。

最簡單的做法是避免初始回發並完全在客戶端進行驗證。換句話說,從更新面板中刪除triggers部分,因爲您已經發現它可以工作。顯然,當點擊「上傳文件」按鈕時,您仍然可以在服務器端進行驗證。

還有其他替代方法,但底線是當頁面中有UploadFile控件時,無法完成回發(這是UpdaPanel在幕後執行的操作),因爲這會導致選定的文件爲提交。爲了證明我的意思,在Page_Load上設置一箇中斷點,並在updatepanel觸發更新時向Request.Files添加一個手錶。

+0

@伊卡洛斯..但據我所知,觸發器只允許更新我的目標更新面板的權利?如果我想定位我的更新面板只更新一次我需要使用什麼方法.. –

+1

@Kaushik UpdatePanels將**只更新它們的內容**,但執行完整的回發*。如果你在'Page_Load'上放置一個斷點並且看看會發生什麼,你可以很容易地看到這一點。確保你添加一個手錶到'Request.Files' – Icarus

+0

@伊卡洛斯..謝謝你..這真的啓發我..好將嘗試解決我的問題根據你提供的知識...謝謝..: ) –