2009-07-29 1 views
2

Ich habe einen ASP.Net Httphandler, die von einer Coldfusion-Seite, deren Form sieht so etwas wie POSTed bekommt:bester Weg, um eine Zeichenfolge von einem Httphandler zu einer Seite zurückkehren, dass die dieses .ashx Datei

<form name="sendToHandler" action="http://johnxp/FileServiceDemo2005/UploadHandler.ashx" method="post"> 
<input type="hidden" name="b64fileName" value="fileservice.asmx.xml" /> 
<input type="hidden" name="strDocument" value="Document" /> 
<input type="submit" name="submitbtn" value="Submit" /> 

Was ist der beste Weg für diesen .NET-Handler, eine Zeichenfolge an die POSTing ColdFusion-Seite zurückzugeben?

EDIT Update 14. August 2009:

Die Lösung, die ich in meiner .ashx Datei beinhaltet die URL der .cfm Datei speichern kam, dass meine Handler und Anhänge einen Abfragezeichenfolgeflag mit dem Ergebnis Saite (n) veröffentlicht wird, Ich möchte mit ColdFusion kommunizieren. Mein CF Kollege nutzt das Vorhandensein oder Fehlen dieser Abfragezeichenfolgeflag Daten die .cfm Webseite entsprechend zu formatieren: in Ihre Methode Process

public void ProcessRequest(HttpContext context) 
    { 
     string returnURL = context.Request.ServerVariables["HTTP_REFERER"]; // posting CFM page 
     string message = UploadFile(context); // handles all the work of uploading a file 
     StringBuilder msgReturn = new StringBuilder(returnURL); 
     msgReturn.Append("?n="); 
     msgReturn.Append(HttpUtility.UrlEncode(TRIMrecNumAssigned)); 
     msgReturn.Append("&m="); // this is just a msg with performance data about the upload operation (elapsed time, size of file, etc.) 
     msgReturn.Append(HttpUtility.UrlEncode(message)); 
     context.Response.Redirect(msgReturn.ToString()); 
    } 

Antwort

11

Schreiben Sie einfach die Zeichenfolge direkt in das Antwortobjekt.

public void ProcessRequest(System.Web.HttpContext context) 
{ 
    context.Response.Write(mystring); 
} 
+0

Danke. Das funktioniert, aber die zurückgegebene "Zeichenfolge" muss von der ursprünglichen Buchungsseite verwendet werden. Durch das Zurücksenden in das Response-Objekt ist es visuell im Browser vorhanden, aber wie lässt man die CF-Seite am besten wissen, was der Wert ist? Wenn ich die URL des HTTPReferrers nach Eingabe in meinen .ashx-Code kenne, wäre es angemessen, etwas wie Response.Redirect zu tun und die zurückgegebene Zeichenfolge in der URL als Querystring zu übergeben? –

+1

Das könnte sicherlich funktionieren, aber das klingt nach einer Ajax-basierten Lösung, bei der Sie das Formular absenden, eine Callback-Funktion verwenden und den Teil der Seite aktualisieren, der es anzeigen soll. – womp

+0

Bitte beachten Sie mein EDIT-UPDATE für den Code und Erklärungen, wie ich diese Frage gelöst habe. Danke für Ideen, die mich in die richtige Richtung weisen. –

0

Wenn Sie Coldfusion wissen, was zurückgegeben wird, dann gibt es wirklich zwei Möglichkeiten, darüber zu gehen.

Die erste besteht darin, die Zeichenfolge an das Formular zurückzugeben (wie von womp vorgeschlagen) und dann aus dem Browser zu behandeln, entweder durch Übermittlung eines sekundären Formulars oder auf andere Weise. Da es so aussieht, als ob alle Werte im Formular zur Verfügung gestellt werden, anstatt vom Benutzer bereitgestellt zu werden, würde ich dies nicht tun.

Eine zweite Methode wäre für CF, das Formular selbst zu bearbeiten. Unter der Annahme, dass die von Ihrem Formular übergebenen Werte für CF verfügbar sind, können Sie mit CFHTTP einen Formularpost "fälschen". CF würde das Ergebnis direkt zurückgeben, und Sie könnten die Antwort von dort behandeln.

+0

@Ben Doom: Für Methode 1 habe ich Womps ursprünglichen Vorschlag versucht, einfach die Zeichenfolge im Response-Objekt (habe noch nichts mit Ajax Callback getan). Was meinst du mit "Handle es vom Browser"? Für Methode 2, ich fürchte, ich habe dich verwirrt oder du hast mich falsch verstanden. Das Snippet, das ich oben platziert habe, ist ein

in einer CF-Seite, die an meinen .ASHX-Code gesendet wird (ich habe kein "Formular" in meiner .Net-Seite der Dinge). Mein Handler ist wie eine Seite mit nur Code, ohne HTML. Meine .ashx muss wie eine unsichtbare Ebene zwischen der ColdFusion-Benutzeroberfläche und den Webdiensten von .Net sein, die aufgerufen werden müssen. –

+0

@ John Galt: CF ist nur serverseitig, daher hat es keine Kenntnis davon, was auf dem Client-Ende passiert, es sei denn, der Client sendet eine Nachricht. AJAX, wie du schon erwähnt hast, wäre eine Möglichkeit, dies zu tun. Ein zweites Formular an CF (nach dem ersten an .NET) wäre ein anderes. Wenn der Client nicht mit dem Formular interagiert, so dass es sich einfach unverändert an den .NET-Dienst richtet, könnte dies von CF mit CFHTTP ohne Beteiligung des Clients gehandhabt werden. Mit anderen Worten: CF reicht das Formular nicht ein, sondern legt es vor. –

1

Sie können JSON von Ihrem HTTP-Handler generieren und jquery.post verwenden, um Formulardaten zu senden und Ergebnisse auf der ColdFusion-Seite zu erhalten.

+0

@Mehrdad - Ich kann erforschen, wie man JSON erzeugt, aber ich bin verwirrt darüber, wie man den Rest deines Vorschlags interpretiert. Sagen Sie, die ColdFusion-Seite würde etwas anderes tun, als eine Schaltfläche zum Übermitteln des Formulars verfügbar zu machen? Mein .ashx-Handler-Code bekommt die Formulardaten von ColdFusion ganz gut - würde diese jquery.post etwas sein, was der ColdFusion-Typ tun sollte, um irgendwie die Rückkehr von meinem HttpHandler zu behandeln? –

+0

Ja, Sie müssen die Kontrolle über die kalte Fusion Seite haben. Die Änderung hängt jedoch von der Art der Nachbearbeitung ab, die das Kaltfusionsskript ausführen muss. Wenn Sie nur etwas Client-Seite anzeigen möchten, funktioniert meine Methode gut. Sie fügen im Grunde einige clientseitige Funktionen hinzu, die irgendwo etwas posten und das Ergebnis auf der Seite anzeigen (vollständig auf dem Client, kein kaltes Fusion-Skript). Wenn Sie jedoch eine serverseitige Verarbeitung durchführen müssen (z. B. einen Transaktionsbericht von einem externen Zahlungsdienst), ist dies nicht geeignet. –

Verwandte Themen