FileUpload und UpdatePanel: ScriptManager.RegisterPostBackControl funktioniert das zweite mal
Entwickle ich eine ASP.NET Anwendung mit C# und Visual Studio 2008 SP1. Ich bin mit WebForms.
Ich habe eine ASPX-Seite mit zwei UpdatePanels, eine auf der linken, hält eine Strukturansicht und die andere auf der rechten Seite, wo ich die geladen werden dynamisch Benutzer-Steuerelemente.
Einem Benutzer die Kontrolle, dass ich auf der rechten Seite, hat ein FileUpload-Steuerelement und ein button zum speichern der Datei auf dem server. Die ascx-code zu speichern, Kontrolle ist:
<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>
Mache ich einen vollständigen postback zum hochladen der Datei auf den server und speichern Sie es auf der Datenbank. Aber ich immer Falsch auf FileUpload.HasFile.
Ich problem ist die richtige UpdatePanel. Ich brauche es Last dynamisch kontrolliert der Anwender. Dieses Gremium hat drei UpdatePanels zu laden die drei Bedienelemente, die ich benutze.
Vielleicht kann ich einen Asynchronen Datei-Uploader, zu löschen oder die richtige Update-Panel und führen Sie einen vollständigen postback zum laden von Steuerelementen dynamisch.
Irgendwelche Ratschläge?
UPDATE:
RegisterPostBackControl
funktioniert... das zweite mal, dass ich klicken Sie auf die Schaltfläche speichern. Ersten mal FileUpload.HasFile FALSCH ist, und das zweite mal, dass ist WAHR.
Zweite Update
Auf der ersten klicken Sie auf ich auch überprüfen, ScriptManager.IsInAsyncPostBack und FALSCH ist. Ich verstehe nicht, NICHTS!!!
Warum?
Den code zum laden der Benutzer-Steuerelement ersten mal, und auf jedem postback ist:
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);
}
Danke.
- Bump. Sie sollten akzeptieren, eine dieser Antworten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Für mich diese Lösung funktionierte:
hinzufügen
Seite.Form.Attribute.Add("enctype", "multipart/form-data");
Das enctype-Attribut fehlt auf den ersten postback.
http://adamnoffie.blogspot.com/2007/10/file-upload-not-working-on-first.html
Legen Sie die folgenden in der form-tag:
enctype="multipart/form-data"
Füllen Sie das Hochladen erfordert eine vollständige post, und wenn Sie ein Update-Panel, es hat eine teilweise post zurück. So, FileUpload, von selbst wird das nicht funktionieren. Sie haben, um es unterschiedlich durch den Aufruf der
RegisterPostBackControl
.Sehen Sie diesen link für details --> http://geekswithblogs.net/mmintoff/archive/2009/04/01/fileupload-within-updatepanel.aspx
In der Antwort auf Ihre zweite update,
Ich hatte genau dieses problem, und ich glaube, es hat mit der Tatsache zu tun, dass Sie durch das hinzufügen einer dynamischen Kontrolle auf Ihrer Seite innerhalb des UpdatePanel.
Kann es einen besseren Weg, es zu tun, da bin ich sicherlich nicht ASP.NET Experte, aber ich war in der Lage, dieses problem zu lösen, auf meinen eigenen, indem Sie das Steuerelement in ein div versteckt war, mit CSS -vor - es war nötig, und dann auto-increment die "dummy" - Steuerung s-ID, damit es keine Konflikte gibt, und ich kann halten Sie das hinzufügen so viele wie ich will. So, wenn das UpdatePanel-ausgelöst wird es voll erkennt die Steuerelemente und deren Inhalt, ausgenommen die versteckten natürlich.
Ich bin mit XSL zu transformieren meine XML-Daten in eine dynamische Seite mit ASP.NET steuert, also im Grunde genommen habe ich Folgendes:
Und dann in der code-behind:
Ich zog eine Menge code, aber es sollte immer noch die Allgemeine Idee, über 🙂
Hatte ich beide miteinander zu kombinieren, die Ratschläge hier. Ich bin mit einem UpdatePanel dynamisch laden ein UserControl und der FileUpload in das Benutzersteuerelement. Ich hatte an:
RegisterPostBackControl in der Benutzer-Steuerelement Page_Load
hinzufügen enctype="multipart/form-data", um das Formular-element auf der Seite, die mit dem update panel, die code-Seite.Form.Attribute.Add("enctype", "multipart/form-data"); hat bei mir nicht funktioniert, musste es in der aspx -
Hoffe, das hilft.
Bei mir hat es geklappt, nur wenn ich es in der Page_Init