none
User per POST nachträglich weiterleiten

    Frage

  • Guten Morgen,

    ich möchte einen User unter bestimmten Bedingungen an eine andere externe Webseite weiterleiten, allerdings per POST. Jetzt habe ich im Forum gesehen, dass diese Frage bereits vor 2 1/2 Jahren gestellt wurde, aber die Antwort kann mir leider nicht helfen, da ich die Daten vorher aufbereiten, und ganz "neue/andere" Formularfelder erstellen und weiterleiten muss.

    Also: User betritt meine Seite, füllt die 3-4 Felder aus, sendet das Formular an meine Seite wieder ab, mein Code-Behind stellt fest "halt, der muss zum Externen Anbieter, da heißt das Feld nicht Name sondern mName" etc. und *klick* wird er auf die andere externe Seite weitergeleitet mit den POST-Daten.

    Gibt es auch heute dafür noch keine Lösung? Kann ja notfalls auch eine Komponente sein oder so ;-)

    Gruß
    Andy

    Dienstag, 17. September 2013 05:20

Antworten

  • Hallo Andy,

    muss der Client/Browser weitergeleitet werden? Falls ja, gibt es nichts. In dem Fall müsstest Du dir serverseitig die neuen Formularfelder erstellen, das Formular an den Client schicken und dann per Javascriptaufruf absenden.

    Problem hierbei ist, dass Du Formulare nicht verschachteln darfst.

    Wenn ich sowas brauche und das nicht mit einem Handler machen kann, sondern eine Webform verwenden muss, gehe ich in der Regel hin und füge mir ziemlich am Schluss der Seite ein Literal Control ein, dass ich dann mit dem Inhalt fülle.

    <%@ Page Language="vb" AutoEventWireup="true" CodeBehind="Test.aspx.vb" Inherits="Test" %>
    
    <!DOCTYPE html>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head id="Head1" runat="server">
        <title>Externer POST Request</title>
    </head>
    <body>
    
    <form id="form1" runat="server">
    
        ...
        
        <asp:Literal ID="ExternalFormContent" runat="server" />
    
    </form>
    
    </body>
    </html>

    Im Code dann bspw. sowas:

    Dim FormContent As String
        FormContent = "</form><form id=""ExternesFormular"" action=""http://andererserver.tld/post.php"" method=""POST"">{0}</form>{1}"
    
    Dim FormFields As String
        FormFields = "<input type=""hidden"" name=""Feld1"" value=""Wert1"" />"
        ...
    
        FormContent = String.Format( FormContent, FormFields, "<script>document.getElementById('ExternesFormular').submit();</script>" )
    
        ExternalFormContent.Text = FormContent

    Damit wird dann sowohl das Formular als auch der JavaScript Befehl zum Absenden des Formulars in die Ausgabe geschrieben.

    Der Code ist jetzt nur schnell dahingeschrieben, könnte also noch Fehler enthalten. Den Weg sollte er aber zeigen.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community



    Dienstag, 17. September 2013 10:20

Alle Antworten

  • Hallo Andy,

    muss der Client/Browser weitergeleitet werden? Falls ja, gibt es nichts. In dem Fall müsstest Du dir serverseitig die neuen Formularfelder erstellen, das Formular an den Client schicken und dann per Javascriptaufruf absenden.

    Problem hierbei ist, dass Du Formulare nicht verschachteln darfst.

    Wenn ich sowas brauche und das nicht mit einem Handler machen kann, sondern eine Webform verwenden muss, gehe ich in der Regel hin und füge mir ziemlich am Schluss der Seite ein Literal Control ein, dass ich dann mit dem Inhalt fülle.

    <%@ Page Language="vb" AutoEventWireup="true" CodeBehind="Test.aspx.vb" Inherits="Test" %>
    
    <!DOCTYPE html>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head id="Head1" runat="server">
        <title>Externer POST Request</title>
    </head>
    <body>
    
    <form id="form1" runat="server">
    
        ...
        
        <asp:Literal ID="ExternalFormContent" runat="server" />
    
    </form>
    
    </body>
    </html>

    Im Code dann bspw. sowas:

    Dim FormContent As String
        FormContent = "</form><form id=""ExternesFormular"" action=""http://andererserver.tld/post.php"" method=""POST"">{0}</form>{1}"
    
    Dim FormFields As String
        FormFields = "<input type=""hidden"" name=""Feld1"" value=""Wert1"" />"
        ...
    
        FormContent = String.Format( FormContent, FormFields, "<script>document.getElementById('ExternesFormular').submit();</script>" )
    
        ExternalFormContent.Text = FormContent

    Damit wird dann sowohl das Formular als auch der JavaScript Befehl zum Absenden des Formulars in die Ausgabe geschrieben.

    Der Code ist jetzt nur schnell dahingeschrieben, könnte also noch Fehler enthalten. Den Weg sollte er aber zeigen.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community



    Dienstag, 17. September 2013 10:20
  • Hallo Stefan,

    VERSTEHE! Genau das war mein eigentliches Problem, dass dann Formulare verschachtelt gewesen wäre.

    Ansatz verstanden, ich probiere mal, ob ich das umsetzen kann, danke ;-)

    So im nachhinein, stimmt, Serverseitig KANN das ja auch gar nicht gehen, mit dem per POST umleiten. Und was dein Vorschlag angeht, kann es nur funktionieren, wenn Javascript aktiviert ist. Aber ich kann es ja so machen, wenn Javascript aktiviert, dann Formular anzeigen, wenn nicht, ausblenden und Alternative wie ein Link oder so reinsetzen...

    Danke!

    Gruß
    Andy

    Dienstag, 17. September 2013 12:52