2013-09-24 72 views
1

我有以下標記:文件上傳不工作過

<asp:Panel runat="server" ID="pnlCallQueue" Visible="false"> 
    <tr> 
     <td>&nbsp;</td> 
     <td class="textBlue"><asp:Label runat="server" ID="lblQueueOnHoldFile" /></td> 
     <td> 
      <asp:CheckBox runat="server" Text=" On Hold Music &nbsp;&nbsp;&nbsp;-&nbsp;&nbsp;&nbsp; " ID="cbQueueOnHoldMusic" /> 
      File: <asp:FileUpload ID="fileOnHoldMusic" runat="server" />   
      <asp:Label runat="server" ID="lblUploadError" style="color: Red;" Visible="false" /> 
     </td> 
    </tr> 
    <tr> 
     <td>&nbsp;</td> 
     <td class="textBlue"><label>Call Distribution: </label></td> 
     <td> 
      <asp:DropDownList runat="server" ID="ddlCallDistribution" style="width: 250px;"> 
      <asp:ListItem Value="ringall" Text="Ring All" Selected="True"></asp:ListItem> 
      <asp:ListItem Value="leastrecent" Text="Least Recent" Selected="False"></asp:ListItem> 
      <asp:ListItem Value="fewestcalls" Text="Fewest Calls" Selected="False"></asp:ListItem> 
      <asp:ListItem Value="random" Text="Random" Selected="False"></asp:ListItem> 
      <asp:ListItem Value="rrmemory" Text="Round Robin" Selected="False"></asp:ListItem> 
      </asp:DropDownList> 
     </td> 
    </tr> 
    <tr> 
     <td>&nbsp;</td> 
     <td class="textBlue"><label>Members: </label></td> 
     <td> 
      <asp:DropDownList runat="server" ID="ddlMembers" style="width: 200px;" /> 
      <asp:DropDownList runat="server" ID="ddlPriority" style="width: 46px;"> 
      <asp:ListItem>1</asp:ListItem> 
      <asp:ListItem>2</asp:ListItem> 
      <asp:ListItem>3</asp:ListItem> 
      <asp:ListItem>4</asp:ListItem> 
      <asp:ListItem>5</asp:ListItem> 
      <asp:ListItem>6</asp:ListItem> 
      <asp:ListItem>7</asp:ListItem> 
      <asp:ListItem>8</asp:ListItem> 
      <asp:ListItem>9</asp:ListItem> 
      <asp:ListItem>10</asp:ListItem> 
      </asp:DropDownList> 
      <asp:Button runat="server" class="button" Text="Add Member" ID="btnAddMember" OnClick="btnAddMember_OnClick" /> 
     </td> 
    </tr> 
    <tr> 
     <asp:UpdatePanel ID="updQueueGrid" runat="server"> 
     <Triggers> 
      <asp:PostBackTrigger ControlID="dgQueueMembers" /> 
      <asp:PostBackTrigger ControlID="btnAddMember" /> 
     </Triggers> 
     <ContentTemplate> 
     <td> 
     </td> 
     <td style="width: 100%; padding: 0pt;" colspan="2" align="left"> 
      <asp:DataGrid ID="dgQueueMembers" runat="server" CssClass="mGrid" Visible="true" 
         AllowSorting="false" AllowPaging="false" AutoGenerateColumns="false" DataKeyField="id" Width="75%" 
         HeaderStyle-CssClass="GridHeader" ItemStyle-CssClass="GridItem" AlternatingItemStyle-CssClass="GridAltItem" 
         > 
      <Columns> 
       <asp:BoundColumn DataField="id" HeaderText="" Visible="false" > 
        <ItemStyle HorizontalAlign="center" /> 
        <HeaderStyle HorizontalAlign="center" /> 
       </asp:BoundColumn> 
       <asp:BoundColumn DataField="agentExtension" HeaderText="Agent Extension"> 
        <ItemStyle HorizontalAlign="center" /> 
        <HeaderStyle HorizontalAlign="center" /> 
       </asp:BoundColumn> 
       <asp:BoundColumn DataField="agentPriority" HeaderText="Priority"> 
        <ItemStyle HorizontalAlign="center" /> 
        <HeaderStyle HorizontalAlign="center" /> 
       </asp:BoundColumn> 
       <asp:TemplateColumn HeaderText=""> 
        <itemstyle HorizontalAlign="center" />        
        <itemtemplate> 
         <asp:LinkButton runat="server" ID="lnkDelQueueMember" OnCommand="DeleteQueueMember" Text="Delete" CommandArgument=<%# Eval("id") %>></asp:LinkButton> 
        </itemtemplate> 
       </asp:TemplateColumn>    
      </Columns>    
       <HeaderStyle BackColor="#eeeeee" /> 
      </asp:DataGrid>   
     </td> 
     </ContentTemplate> 
     </asp:UpdatePanel> 
    </tr> 
</asp:Panel> 

     ... 

</asp:Content> 

的頁面基本上是一些設置,這些設置當按下保存按鈕所有提交的。這是一個asp:Button,並導致Page_Load發生,這消除了FileUpload控件,導致它始終具有HasFile屬性爲false

我知道FileUpload控件很混亂,我應該使用別的東西,但時間限制阻止我從頭開始任何事情。奇怪的是,與此相同的代碼在單獨的頁面上正常工作(在該頁面上FileUpload不在Panel中)。

我怎樣才能讓這個FileUpload堅持過去的頁面加載,或者更好的是,我怎樣才能讓我的Save_OnClick代碼隱藏執行而不會導致不必要的頁面加載?

謝謝。

回答

1

FileUpload s需要完整的回發才能工作。

無論你的頁面上的東西是招致回發點擊Save按鈕之前,或Save按鈕是UpdatePanel內部,無法添加到TriggersPostBackTrigger

<asp:PostBackTrigger ControlID="btnSave" /> 

我建議做以下完全避免的情況:

  1. 創建Load按鈕(確保這個存在於觸發器)
  2. 添加其中包含文件名的標籤,所以用戶知道該文件已加載
  3. 單擊bntLoadFile後,更新標籤並保存該文件或在保存期間執行的任何操作。

XHTML:

<asp:ScriptManager runat="server" ID="ScriptManager1" /> 
<asp:UpdatePanel runat="server"> 
<Triggers> 
    <asp:PostBackTrigger ControlID="btnLoadFile" /> 
</Triggers> 
    <ContentTemplate> 
     <asp:FileUpload runat="server" ID="fileOnHoldMusic" /> 
     <asp:Button runat="server" ID="btnLoadFile" Text="Load File" onclick="btnLoadFile_Click" /><br />    
     <asp:Label runat="server" ID="lblFileTitle" Text="File: " /><asp:Label runat="server" ID="lblFile" /> 
    </ContentTemplate> 
</asp:UpdatePanel> 

背後代碼:

protected void btnLoadFile_Click(object sender, EventArgs e) 
{ 
    lblFile.Text = fileOnHoldMusic.FileName; 

    // Do whatever you need to do with 
    // the file now. Maybe persist data 
    // for the Save event to use. 
}