FileUpload und UpdatePanel: ScriptManager.RegisterPostBackControl funktioniert das zweite Mal

7

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.

    
VansFannel 15.02.2010, 07:44
quelle

6 Antworten

26

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.

Ссылка

    
user326796 27.04.2010, 11:17
quelle
3

Fügen Sie Folgendes in Ihr Formular-Tag ein:

enctype="multipart / form-data"

    
RepDetec 25.10.2010 17:28
quelle
1

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; Ссылка

    
Bhaskar 15.02.2010 07:55
quelle
1

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:)

    
emmilely 18.03.2010 16:56
quelle
1

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

  • sein

Hoffe, das hilft.

    
David 21.02.2011 21:31
quelle
0

Es funktionierte nur für mich, wenn ich es in Page_Init

steckte %Vor%     
Zocolo Fishing 02.07.2013 15:03
quelle