jeudi 8 janvier 2009

Ajax UpdatePanel et l'Upload de fichiers

Le saviez-vous ? Certains contrôles ne sont pas compatibles avec UpdatePanel:

- TreeView et les contrôles Menu;
- Les contrôles Web Parts;
- FileUpload s'ils sont utilisés pour faire un upload de fichiers avec un PostBack asynchrone;
- GridView et DetailsView lorsque la propriété EnableSortingAndPagingCallbacks est true;
- Login, PasswordRecovery, ChangePassword et CreateUserWizard dont le Content n'a pas été converti en modèles éditables;
- Le contrôle Substitution;
- Les contrôles de validation.

En tout cas, je ne le savais pas avant de passer des heures à me tirer les cheveux pour comprendre ce qui n'allait pas dans ma page :) J'ai un WebForm avec des zones de saisie et un espace pour Upload de photos, tout marchait bien, mais dès que j'ai utilisé UpdatePanel j'ai obtenu l'erreur suivante:

Sys.WebForms.PageRequestManagerServerErrorException: Object reference not set to an instance of an object

erreur upload et updatepanel

La solution est la suivante: ajouter un PostBackTrigger sur le boutton qui déclenche l'Upload afin que ce boutton provoque un PostBack

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<
ContentTemplate>
<
asp:FileUpload ID="fileUpload" runat="server" />
<
br />
<
asp:Button ID="cmdUpload" runat="server" Height="25px" OnClick="cmdUpload_Click" Text="Upload"
Width="128px" />
</
ContentTemplate>

<
Triggers>
<
asp:PostBackTrigger ControlID
="cmdUpload" />
</
Triggers
>
</
asp:UpdatePanel>



L'Upload ensuite fonctionne correctement:

fileUpload.PostedFile.SaveAs(@"c:\test\" + System.IO.Path.GetFileName(fileUpload.PostedFile.FileName));


Response.Write n'est pas non plus compatible avec UpdatePanel, j'en parlerai dans un prochain post.


Aucun commentaire: