I have read a ton of articles on how to fix the issue of having a fileupload inside of an updatepanel.
Basically the reasoning is that having the fileupload control inside of an update panel is a security issue. And to get around it
you need to wrap a triggers <TRIGGERS> tag with a button control to do a post back for the file upload control. However,
this does not work for me because I have a gridview inside of my update panel. I tried to put a triggers tag inside of the update panel
but it complained that it could not find a control with ID btnUpload. I think it is because the button is inside of my gridview which is inside of my update panel.
My issue is basically that fileupload control returns false, and I read that it is because it needs to post back.
Can anyone help me out?
Here is my gridview code:
<pre>
<asp:UpdatePanelID="myPanel"runat="server">
<ContentTemplate>
<asp:GridViewCellPadding="3"Font-Size="X-Small"DataKeyNames="ID"Width="100%"GridLines="both"AlternatingRowStyle-BackColor="#F0F8FF"BackColor="#E8E8E8"HeaderStyle-BackColor="#377CB1"ID="gvLineItems"runat="server"AllowSorting="True"AutoGenerateColumns="False"OnSelectedIndexChanged="gvLineItems_SelectedIndexChanged">
<Columns>
<asp:TemplateFieldHeaderText="ID"SortExpression="ID"Visible="False">
<ItemTemplate>
<asp:LabelID="lblExpenseReportLineItemID"runat="server"Text='<%# DataBinder.Eval(Container, "DataItem.ID") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<HeaderTemplate>
<asp:CheckBoxID="HeaderLevelCheckBox"runat="server"/>
</HeaderTemplate>
<ItemTemplate>
<asp:CheckBoxID="chkSelector"runat="server"onclick="ChangeRowColor(this)"/>
</ItemTemplate>
<ItemStyleHorizontalAlign="Center"Width="1%"/>
<HeaderStyleHorizontalAlign="Center"/>
</asp:TemplateField><asp:TemplateField>
<ItemTemplate>
<asp:ImageButtonID="ibAddLineItem"runat="server"ImageUrl="images/InsertRow.gif"CommandName="Insert"ToolTip="Insert new row"/>
</ItemTemplate>
<ItemStyleWidth="1%"/>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<asp:ImageButtonID="ibDelete"runat="server"CommandName="DeleteRow"ImageUrl="images/d.gif"
ToolTip="Delete Line Item?"/>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateFieldHeaderText="Date"SortExpression="Date">
<ItemTemplate>
<ajaxToolkit:CalendarExtenderTargetControlID="txtLineItemDate"ID="CalendarExtender3"runat="server">
</ajaxToolkit:CalendarExtender>
<asp:TextBoxWidth="60px"ID="txtLineItemDate"runat="server"Text='<%# DataBinder.Eval(Container, "DataItem.LineItemDate") %>'>
</asp:TextBox>
</ItemTemplate>
<ItemStyleHorizontalAlign="Center"Width="10%"/>
<HeaderStyleForeColor="White"HorizontalAlign="Center"Width="12%"/>
</asp:TemplateField><asp:TemplateFieldHeaderText="Reason"SortExpression="Reason">
<ItemTemplate>
<asp:DropDownListWidth="100px"ID="ddlExpenseTypes"DataSource='<%# GetExpenseTypes() %>'SelectedValue='<%# Bind("ExpenseReasonID") %>'DataTextField="ExpenseReasonID"DataValueField="ExpenseReasonID"runat="server"></asp:DropDownList>
</ItemTemplate>
<ItemStyleHorizontalAlign="Center"Width="50%"/>
</asp:TemplateField><asp:TemplateFieldHeaderText="Receipt"SortExpression="Date">
<ItemTemplate>
<asp:CheckBoxID="cbReceipt"runat="server"Checked='<%# DataBinder.Eval(Container, "DataItem.HasReceipt") %>'/>
</ItemTemplate>
<HeaderStyleForeColor="White"/>
<ItemStyleHorizontalAlign="Center"Width="1%"/>
</asp:TemplateField><asp:TemplateFieldHeaderText="Amount"SortExpression="Amount">
<ItemTemplate>
<asp:TextBoxWidth="40px"ID="txtAmount"runat="server"Text='<%# DataBinder.Eval(Container, "DataItem.AmountSpent") %>'/>
</ItemTemplate>
<ItemStyleWidth="1%"/>
</asp:TemplateField>
<asp:TemplateFieldHeaderText="Currency"SortExpression="Currency">
<ItemTemplate>
<asp:DropDownListID="ddlCurrency"OnSelectedIndexChanged="ddlCurrency_SelectedIndexChanged"runat="server"AutoPostBack="true"DataSource='<%# GetCurrency() %>'SelectedValue='<%# Bind("CountryID") %>'DataTextField="CountryID"DataValueField="CountryID"></asp:DropDownList>
</ItemTemplate>
<ItemStyleHorizontalAlign="Center"Width="50%"/>
</asp:TemplateField><asp:TemplateFieldHeaderText="Rate"SortExpression="Rate">
<ItemTemplate>
<asp:TextBoxWidth="40px"ID="txtRate"runat="server"Text='<%# DataBinder.Eval(Container, "DataItem.Rate") %>'/></ItemTemplate>
<ItemStyleWidth="1%"/>
</asp:TemplateField>
<asp:TemplateFieldHeaderText="USD"SortExpression="USD">
<ItemTemplate>
<asp:LabelID="lblUSD"runat="server"Text='<%# DataBinder.Eval(Container, "DataItem.AmountBackInUSD") %>'/></ItemTemplate>
<ItemStyleWidth="1%"/>
</asp:TemplateField>
<asp:TemplateFieldHeaderText="Desc."SortExpression="Desc.">
<ItemTemplate>
<asp:TextBoxWidth="100px"Font-Names="Arial"ID="txtExpenseReasonDescription"runat="server"Text='<%# DataBinder.Eval(Container, "DataItem.ExpenseReasonDescription") %>'/></ItemTemplate>
<ItemStyleWidth="1%"HorizontalAlign="Left"/>
</asp:TemplateField>
<asp:HyperLinkFieldHeaderText="Link"SortExpression="Link"DataNavigateUrlFields="AttachmentLink"DataNavigateUrlFormatString="{0}"
DataTextField="AttachmentLink"DataTextFormatString="Link"Target="_blank">
<ControlStyleForeColor="Navy"/>
<HeaderStyleForeColor="White"/>
</asp:HyperLinkField>
<asp:TemplateFieldHeaderText="Upload File?"SortExpression="ID">
<ItemTemplate>
<asp:FileUploadWidth="100px"ID="fuAttachment"runat="server"/>
<asp:ButtonID="btnUpload"runat="server"Text="Upload"/>
</ItemTemplate>
<HeaderStyleForeColor="White"/>
</asp:TemplateField>
</Columns>
<HeaderStyleBackColor="#377CB1"/>
<AlternatingRowStyleBackColor="AliceBlue"/>
</asp:GridView>
<divstyle="width:100%">
<asp:LabelID="lblMessage2"runat="server"></asp:Label>
</div>
<divstyle="width:100%; text-align:right;">
<tablewidth="100%"cellpadding="0"cellspacing="0">
<tr>
<tdclass="tableFields">
</td>
<td>
<asp:PanelID="pGridControls"runat="server"Width="100%"Visible="False">
<asp:LabelID="Label2"runat="server"Text="Any changes must be followed by a <u>save</u>!"BackColor="#FFFF80"Font-Bold="True"ForeColor="#377CB1"></asp:Label>
<asp:ImageButtonID="ibSaveGrid"runat="server"ImageUrl="images/smallSave.gif"ToolTip="Save / refresh changes?"CausesValidation="False"OnClick="ibSaveGrid_Click"/><asp:ImageButtonID="ibDeleteGrid"runat="server"ImageUrl="images/smallDelete.gif"ToolTip="Delete checked rows?"CausesValidation="False"OnClick="ibDeleteGrid_Click"/></asp:Panel>
</td>
</tr>
</table>
</div>
</ContentTemplate>
<Triggers><asp:PostBackTriggerControlID="btnUpload"/></Triggers></asp:UpdatePanel>
</pre>
Notice the triggers tag...when I load the page it automatically gives me an error saying btnUpload control not found!