FileUpload et UpdatePanel: ScriptManager.RegisterPostBackControl travaux de la deuxième fois
Je suis l'élaboration d'un ASP.NET application avec C# et Visual Studio 2008 SP1. Je suis à l'aide de Formulaires web.
J'ai une page ASPX avec deux UpdatePanels, l'un sur la gauche qui détient un TreeView et d'autres sur la droite où je charger dynamiquement des contrôles utilisateur.
Un contrôle de l'utilisateur, que j'ai utilisé sur le panneau de droite, a un contrôle FileUpload et un bouton pour enregistrer ce fichier sur le serveur. Le ascx code pour enregistrer de 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 à télécharger le fichier sur le serveur et de les enregistrer dans la base. Mais j'ai toujours l'obtention de Faux sur FileUpload.HasFile.
J'problème est le droit UpdatePanel. J'en ai besoin pour charger dynamiquement les commandes de l'utilisateur. Ce panneau a trois UpdatePanels à la charge de l'utilisateur trois commandes que j'utilise.
Peut-être que je peux utiliser un Async Fichier Uploader ou de supprimer le droit Panneau de mise à Jour et de faire une publication complète à la charge des contrôles dynamiquement.
Des conseils?
Mise à JOUR:
RegisterPostBackControl
œuvres... la deuxième fois que je clique sur le bouton enregistrer. Première fois FileUpload.HasFile est FAUX, et la deuxième fois, c'est VRAI.
Deuxième Mise À Jour
Sur cliquez d'abord j'ai aussi vérifier ScriptManager.IsInAsyncPostBack et qui est FAUSSE. Je ne comprends RIEN!!
Pourquoi?
Charger le code de contrôle de l'utilisateur première fois, et à chaque publication 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.
OriginalL'auteur VansFannel | 2010-02-15
Vous devez vous connecter pour publier un commentaire.
Pour moi, cette solution a fonctionné:
ajouter
Page.Forme.Les attributs.Add("enctype", "multipart/form-data");
L'attribut enctype est manquant sur la première publication.
http://adamnoffie.blogspot.com/2007/10/file-upload-not-working-on-first.html
travail de charme agréable !+1
OriginalL'auteur user326796
Placez la ligne suivante dans votre balise de formulaire:
enctype="multipart/form-data"
OriginalL'auteur RepDetec
Remplir requiert le Téléchargement d'un poste à plein, et si vous utilisez un Panneau de mise à Jour, il n'partielle d'un message de retour. Donc, FileUpload ne fonctionnera pas. Vous aurez à gérer la situation différemment par l'appel de la
RegisterPostBackControl
.Voir ce lien pour plus de détails --> http://geekswithblogs.net/mmintoff/archive/2009/04/01/fileupload-within-updatepanel.aspx
Ok, ça marche... la deuxième fois que je clique sur le bouton Enregistrer. Pourquoi?
J'ai mis à jour ma question. Je suis en train de faire une publication complète, mais FileUpload ne fonctionne pas.
OriginalL'auteur Bhaskar
En réponse à votre deuxième mise à jour,
J'ai eu exactement ce problème, et je crois que ça a à voir avec le fait que vous ajoutez un contrôle dynamique de votre page à l'intérieur de l'UpdatePanel.
Il peut y avoir une meilleure façon de le faire sortir de là, comme je ne suis certainement pas ASP.NET expert, mais j'ai été en mesure de résoudre ce problème sur mon propre en ajoutant le contrôle dans une div qui a été caché à l'aide de CSS -avant - c'était nécessaire, et puis l'auto-incrémentation de la "tétine" ID du contrôle, donc il n'y a pas de conflits, et je peux ajouter autant que je veux. De cette manière, lorsque l'UpdatePanel est déclenché, il reconnaît pleinement les contrôles et de leur contenu, à l'exception de ceux qui sont cachés bien sûr.
Je suis à l'aide de XSL pour transformer mon XML dans une page dynamique qui comprend ASP.NET les contrôles de, donc en gros j'ai fait la suivante:
Et puis dans le code-behind:
J'ai dépouillé d'une grande partie du code, mais il devrait encore se faire une idée générale de partout 🙂
OriginalL'auteur emmilely
J'ai eu de combiner à la fois des conseils ici. Je suis en utilisant un UpdatePanel de charger dynamiquement un UserControl et la FileUpload est dans le contrôle UserControl. J'ai dû:
RegisterPostBackControl dans le contrôle de l'utilisateur du Page_Load
ajouter enctype="multipart/form-data" à l'élément de formulaire de la page, qui contient le panneau de mise à jour, la Page de code.Forme.Les attributs.Add("enctype", "multipart/form-data"); ne fonctionne pas pour moi, il devait être dans le aspx
Espère que cette aide.
OriginalL'auteur David
Il a travaillé pour moi, seulement quand je l'ai mis dans le Page_Init
OriginalL'auteur Zocolo Fishing