2012-07-19 74 views
0

我的問題是一個簡單的答案,我希望。FileUpload控件無法正常工作'外部'AJAX更新面板,但工作'內部'與回傳觸發器?

我正在製作一個帶有文件上傳控件的簡單表格,該文件首先在AJAX面板中未使用,對於我的生活,我無法弄清楚爲什麼我的代碼保持不變,爲什麼我的代碼找不到FileUpload控件。

<asp:Panel ID="pnlUpload" runat="server" class="workerDetailsPanelLeft" Visible="true"> 

<h3 class="titleHighlightStyle">Probation Documents</h3><br /> 
<table cellspacing="0"> 
<tr> 
<td class="standardLabel" valign="top">Current Documents</td> 
<td colspan="2"> 
<asp:ListBox ID="lstDocs" runat="server" Width="200px"></asp:ListBox> 
</td> 
</tr> 
<tr> 
<td> 
&nbsp; 
</td> 
<td> 
<asp:ImageButton ID="btnSelect" runat="server" SkinID="selectprobationdoc"/> 
</td> 
<td class="standardLabel" style ="width:200px">Select documents</td> 
</tr> 
<tr> 
<td> 
&nbsp; 
</td> 
</tr> 
<tr> 
<td class="standardLabel">Upload Documents</td> 
<td colspan="2"> 
<asp:FileUpload ID="uplDoc" runat="server" Height="22px" Width="200px"/> 
</td> 
</tr> 
<tr> 
<td> 
&nbsp; 
</td> 
<td> 
<asp:Button ID="btnSave" runat="server" Text="Save" OnClick="btnSave_Click" CausesValidation="False" /> 
</td> 
</tr> 
<tr> 
<td> 
&nbsp; 
</td> 
</tr> 
<tr> 
<td> 
<asp:Label ID="lblUploadError" runat="server" Text="Probation document required" ForeColor="Red" Visible="false"></asp:Label> 
</td> 
</tr> 
</table>    
</asp:Panel> 

原諒格式化我刪除了空格!

現在,當我的標記是這樣的,我調用FileHandler上的.HasFile()它返回一個空值?

當我添加以下

<asp:UpdatePanel ID="ContentPanel" UpdateMode="Conditional" runat="server" ChildrenAsTriggers="true"> 
<Triggers> 
<asp:PostBackTrigger ControlID="btnSave" /> 
</Triggers> 
<ContentTemplate> 
    *Markup as above* 

我可以得到控制的內容。我知道Ajax更新面板存在文件上傳控制問題,解決方案是添加回發觸發器,但任何人都可以從此標記中看到爲什麼它可能會失敗?找到該文件?

  if (this.uplDoc.HasFile) 
     { 
      String fileExtension = System.IO.Path.GetExtension(uplDoc.FileName).ToLower(); 
      String validExt = sAllowedExt; 

      if (validExt.IndexOf("," + fileExtension + ",") != -1) 
      { 
       if (this.uplDoc.FileBytes.Length >= 0) 
       { 
        return string.Empty; 
       } 
       else 
       { 
        return "PROC0003"; //Invalid File Size    
       } 
      } 
      else 
      { 
       return "PROC0002"; //Invalid file type   
      } 
     } 

上面是檢查背後的初始代碼,這從未改變從ading更新面板。

有人能幫我理解我錯過了什麼嗎?

感謝

+1

讓我猜猜,'pnlUpload'是不可見的,在啓動客戶端,但在某些時候,你設置它的visibily爲'真'(或展示給客戶以某種方式另一個),正確嗎? – Shai 2012-07-19 11:28:01

+0

yes糾正其隱藏起來 – dotnetnewb 2012-07-19 11:35:21

+0

好吧,試着將這一行添加到您的'Page_Load'事件中:'ScriptManager.GetCurrent(this).RegisterPostBackControl(uplDoc);' – Shai 2012-07-19 11:40:01

回答

0

這是一個簡單的回答,

承載內容的網頁包裝的更新面板中的頁面,因此爲什麼我的代碼沒有得到文件上傳控件的內容

母版頁,它正在做一個異步回發,而不是一個完整的回發。

還是要謝謝你@Shai