Ich entwickle eine ASP.NET-Anwendung mit C # und Visual Studio 2008 SP1. Ich verwende WebForms.
Ich habe eine ASPX-Seite mit zwei UpdatePanels, eine links, die ein TreeView enthält und eine andere auf der rechten Seite, wo ich dynamisch Benutzersteuerelemente lade.
Ein Benutzersteuerelement, das ich im rechten Fensterbereich verwendet habe, verfügt über ein FileUpload-Steuerelement und eine Schaltfläche zum Speichern dieser Datei auf dem Server. Der ascx-Code zum Speichern der Kontrolle lautet:
%Vor%Ich mache ein komplettes Postback, um die Datei auf den Server hochzuladen und in der Datenbank zu speichern. Aber ich bekomme immer falsch auf FileUpload.HasFile.
I Problem ist das richtige UpdatePanel. Ich brauche es, um die Benutzersteuerelemente dynamisch zu laden. Dieses Panel hat drei UpdatePanels zum Laden der drei Benutzersteuerelemente, die ich verwende.
Vielleicht kann ich einen Async File Uploader verwenden oder das rechte Update Panel löschen und ein komplettes Postback ausführen, um die Controls dynamisch zu laden.
Irgendwelche Tipps?
UPDATE:
RegisterPostBackControl
funktioniert ... das zweite Mal klicke ich auf Speichern. FileUpload.HasFile ist zum ersten Mal FALSE und das zweite Mal ist TRUE.
Zweites Update
Beim ersten Klick überprüfe ich auch ScriptManager.IsInAsyncPostBack und ist FALSE. Ich verstehe nichts !!
Warum?
Der Code zum erstmaligen Laden des Benutzersteuerelements und für jeden Postback lautet:
%Vor%Danke.
Für mich hat diese Lösung funktioniert:
hinzufügen Page.Form.Attributes.Add ("enctype", "multipart / form-data");
Das Attribut enctype fehlt beim ersten Postback.
Fill Upload erfordert einen vollständigen Post, und wenn Sie ein Update Panel verwenden, wird es teilweise zurückgeliefert. Also, FileUpload selbst wird nicht funktionieren. Sie müssen anders damit umgehen, indem Sie RegisterPostBackControl
aufrufen.
Siehe diesen Link für Details - & gt; Ссылка
Als Reaktion auf Ihr zweites Update
Ich hatte genau dieses Problem und ich glaube, es hat damit zu tun, dass Sie Ihrer Seite innerhalb des UpdatePanels ein dynamisches Steuerelement hinzufügen.
Es mag einen besseren Weg geben, es dort zu tun, da ich sicherlich kein ASP.NET-Experte bin, aber ich konnte dieses Problem selbst lösen, indem ich das Steuerelement in einem Div hinzufügte, das zuvor mit CSS ausgeblendet wurde - Es wurde benötigt, und dann automatisch die ID des "Dummy" -Steuerelements inkrementiert, so dass es keine Konflikte gibt, und ich kann so viele hinzufügen, wie ich möchte. Auf diese Weise erkennt das UpdatePanel, wenn es ausgelöst wird, die Steuerelemente und deren Inhalt vollständig, ausgenommen natürlich die verborgenen.
Ich verwende XSL, um meine XML in eine dynamische Seite umzuwandeln, die ASP.NET-Steuerelemente enthält, also habe ich im Wesentlichen Folgendes getan:
%Vor%Und dann im Code-Behind:
%Vor%Ich habe viel von dem Code entfernt, aber es sollte trotzdem die allgemeine Idee bekommen:)
Ich musste beide Ratschläge hier kombinieren. Ich verwende ein UpdatePanel, um ein UserControl dynamisch zu laden, und das FileUpload befindet sich in dem UserControl. Ich musste:
RegisterPostBackControl im Page_Load des Benutzersteuerelements
Fügen Sie enctype="multipart / form-data" zum Formularelement der Seite hinzu, die das Update-Panel enthält, den Code Page.Form.Attributes.Add ("enctype", "multipart / form-data "); funktionierte nicht für mich, es musste in der aspx
Hoffe, das hilft.
Es funktionierte nur für mich, wenn ich es in Page_Init
steckte %Vor%Tags und Links c# file-upload asp.net-ajax updatepanel