Je développe une application ASP.NET avec C# et Visual Studio 2008 SP1. J'utilise WebForms.FileUpload et UpdatePanel: ScriptManager.RegisterPostBackControl fonctionne la deuxième fois
J'ai une page ASPX avec deux UpdatePanels, un sur la gauche qui contient un TreeView et l'autre sur la droite où je charge dynamiquement les contrôles utilisateur.
Un contrôle d'utilisateur, que j'ai utilisé sur le panneau droit, a un contrôle FileUpload et un bouton pour enregistrer ce fichier sur le serveur. Le code ascx pour sauver le contrôle est:
<asp:UpdatePanel ID="UpdatePanelBotons" runat="server" RenderMode="Inline"
UpdateMode="Conditional">
<ContentTemplate>
<asp:Button ID="Save" runat="server" Text="Guardar"
onclick="Save_Click" CssClass="button" />
</ContentTemplate>
<Triggers>
<asp:PostBackTrigger ControlID="Save" />
</Triggers>
</asp:UpdatePanel>
Je fais une publication complète pour télécharger le fichier sur le serveur et l'enregistrer dans la base de données. Mais je reçois toujours False sur FileUpload.HasFile.
Le problème est le bon UpdatePanel. J'en ai besoin pour charger dynamiquement les contrôles utilisateur. Ce panneau a trois UpdatePanels pour charger les trois contrôles utilisateur que j'utilise. Peut-être que je peux utiliser un téléchargeur de fichiers Async ou supprimer le bon panneau de mise à jour et faire une publication complète pour charger les contrôles de façon dynamique.
Un conseil?
MISE À JOUR:
RegisterPostBackControl
fonctionne ... la deuxième fois que je clique sur le bouton Enregistrer. La première fois FileUpload.HasFile est FALSE, et la deuxième fois est TRUE.
Deuxième mise à jour
Le premier clic je vérifie également ScriptManager.IsInAsyncPostBack et est FAUX. Je ne comprends rien
Pourquoi?
Le code pour charger première fois le contrôle de l'utilisateur, et sur chaque postback est:
DynamicControls.CreateDestination ud =
this.LoadControl(ucUrl) as DynamicControls.CreateDestination;
if (ud != null)
{
Button save = ud.FindControl("Save") as Button;
if (save != null)
ScriptManager1.RegisterPostBackControl(save);
PanelDestination.Controls.Add(ud);
}
Merci.
Bump. Vous devriez accepter l'une de ces réponses. –