I tried to wrap the ManagePhotoAlbum.aspx with an UpdatePanel and the FileUpload did not work any more.
I read in the Ajax documentation that:
"To use a FileUpload control inside an UpdatePanel control, set the postback control that submits the file to be a PostBackTrigger control for the panel."
I set a <PostBackTrigger> to point to the InsertButton but at runtime I get the exception:
"A control with ID 'InsertButton' could not be found for the trigger in UpdatePanel 'UpdatePanel1' "
Why the <PostBackTrigger> cannot find a control which is in the same page ?
Here below you can find my code:
ManagePhotoAlbum.aspx
Code:
<%@ Page Language="C#"
MasterPageFile="~/PagineMaster/MasterPage.master"
AutoEventWireup="true"
CodeFile="ManagePhotoAlbum.aspx.cs"
Inherits="Albums_ManagePhotoAlbum"
Title="Gestione album fotografico"
%>
<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="cphMain" Runat="Server">
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="true">
<ContentTemplate>
<asp:Panel ID="Panel1" runat="server" style="padding: 8px; border: thin solid #0000FF">
<asp:Panel ID="Panel2" runat="server" style="padding: 3px; border: thin solid #0000FF"
Height="33px">
<h3>Gestione album fotografico</h3>
</asp:Panel>
<br />
<asp:ListView ID="ListView1" runat="server"
DataKeyNames="Id"
DataSourceID="LinqDataSource1"
InsertItemPosition="LastItem"
oniteminserting="ListView1_ItemInserting">
<LayoutTemplate>
<ul class="RiquadroFoto">
<li ID="itemPlaceholder" runat="server" />
</ul>
</LayoutTemplate>
<InsertItemTemplate>
<li>
Descrizione
<br />
<asp:TextBox ID="DescrizioneTextBox" runat="server"
Text='<%# Bind("Descrizione") %>' />
<asp:RequiredFieldValidator ID="rfvDescrizione" runat="server" ErrorMessage="Inserire la descrizione della foto" ControlToValidate="DescrizioneTextBox"></asp:RequiredFieldValidator>
<br />
Tooltip
<br />
<asp:TextBox ID="TooltipTextBox" runat="server" Text='<%# Bind("Tooltip") %>' />
<asp:RequiredFieldValidator ID="rfvTooltip" runat="server" ErrorMessage="Inserire il tooltip della foto" ControlToValidate="TooltipTextBox"></asp:RequiredFieldValidator>
<br />
Foto
<br />
<asp:FileUpload ID="FileUpload1" runat="server" />
<asp:CustomValidator ID="CustomValidator1" runat="server" ErrorMessage="Scegliere un file con estensione jpg"></asp:CustomValidator>
<br /><br />
<asp:Button ID="InsertButton" runat="server" CommandName="Insert"
Text="Inserisci" />
<asp:Button ID="CancelButton" runat="server" CommandName="Cancel"
Text="Annulla" CausesValidation="False" />
</li>
</InsertItemTemplate>
<ItemTemplate>
<li>
<asp:Label ID="DescrizioneLabel" runat="server"
Text='<%# Eval("Descrizione") %>' />
<br />
<asp:Label ID="TooltipLabel" runat="server" Text='<%# Eval("Tooltip") %>' />
<br />
<asp:Image ID="ImageUrl" runat="server" ImageUrl='<%# Eval("Url") %>' />
<br />
<asp:Button ID="DeleteButton" runat="server" CommandName="Delete"
Text="Elimina" />
</li>
</ItemTemplate>
</asp:ListView>
<asp:LinqDataSource ID="LinqDataSource1" runat="server"
ContextTypeName="PlanetWroxDataContext" EnableDelete="True" EnableInsert="True"
TableName="Pictures" Where="AlbumId == @AlbumId"
oninserting="LinqDataSource1_Inserting">
<WhereParameters>
<asp:QueryStringParameter DefaultValue="-1" Name="AlbumId"
QueryStringField="AlbumId" Type="Int32" />
</WhereParameters>
</asp:LinqDataSource>
</asp:Panel>
</ContentTemplate>
<Triggers>
<asp:PostBackTrigger ControlID="InsertButton" />
</Triggers>
</asp:UpdatePanel>
</asp:Content>
ManagePhotoAlbum.aspx.cs
Code:
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
public partial class Albums_ManagePhotoAlbum : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
int albumId = Convert.ToInt32(Request.QueryString.Get("AlbumId"));
using (PlanetWroxDataContext mioDataContext = new PlanetWroxDataContext())
{
string proprietarioAlbum = (from p in mioDataContext.PhotoAlbum
where p.Id == albumId
select p.Utente).Single();
if ( (User.Identity.Name != proprietarioAlbum) && (!User.IsInRole("Manager")) )
{
Response.Redirect("~/");
}
}
}
protected void LinqDataSource1_Inserting(object sender, LinqDataSourceInsertEventArgs e)
{
Picture miaFoto = (Picture)e.NewObject;
miaFoto.AlbumId = Convert.ToInt32(Request.QueryString.Get("AlbumId"));
FileUpload mioFileUpload = (FileUpload)ListView1.InsertItem.FindControl("FileUpload1");
string percorsoVirtuale = "~/ImmaginiDB/";
string percorsoReale = Server.MapPath(percorsoVirtuale);
string nomeFile = Guid.NewGuid().ToString();
string estensione = System.IO.Path.GetExtension(mioFileUpload.FileName);
mioFileUpload.SaveAs(System.IO.Path.Combine(percorsoReale, nomeFile + estensione));
miaFoto.Url = percorsoVirtuale + nomeFile + estensione;
}
protected void ListView1_ItemInserting(object sender, ListViewInsertEventArgs e)
{
FileUpload mioFileUpload = (FileUpload)ListView1.InsertItem.FindControl("FileUpload1");
if (!mioFileUpload.HasFile || !mioFileUpload.FileName.ToLower().EndsWith(".jpg"))
{
CustomValidator CustomValidator1 = (CustomValidator)ListView1.InsertItem.FindControl("CustomValidator1");
CustomValidator1.IsValid = false;
e.Cancel = true;
}
}
}