2012-04-03 4 views
3

Ich möchte einen Ajax-Aufruf an den Server machen. Ich brauche die html der Seite zu holen sagen foo.aspx: Foo.aspx html:Erhalten Antwort von Aspx-Seite im JSON-Format anstelle von nur HTML

<form> 
<div>foo</div> 
</form> 

ich diese Seite von Remote-Seite wie der Aufruf:

  $.ajax({ 
      url: '/foo.aspx', 
      data: {}, 
      contentType: 'application/json; charset=utf-8', 
      dataType: 'json', 
      success: function (response) { 

      } 
     }); 

ich den HTML-Code dieser Seite brauchen Aber meine Anforderung ist, dass die Antwort von dieser Seite JSON-Format sein sollte. dh.

{"myresponse": { 
    "id": "123", 
    "html":<HTML of foo.aspx>, 

}} 

Ich brauche die html als json Eigenschaft, weil ich hinter anderen Eigenschaften auch von foo.aspx Code einstellen müssen? Wie kann ich Antwort von ASPX-Seite im JSON-Format anstelle von reinem HTML bekommen? Was ist der andere Ansatz, um HTML von Remote-Seite + andere Eigenschaften auch im JSON-Format vom Server zu bekommen? Soll ich HTTPHandler verwenden? Wenn ja, wie bekomme ich den HTML-Code von foo.aspx in diesem HTTPHandler?

+0

so wo ist das Problem? Hast du versucht, das zu tun, was du gerade gesagt hast? Es sollte wie ein Charme funktionieren –

+1

Sie können [WebMethod] dafür verwenden ... Bitte überprüfen Sie http://StackOverflow.com/questions/348689/jquery-ajax-with-asp-net-webmethod-returning-entire- Seite – Flowerking

+0

Wie kann ich den HTML-Code meiner foo.aspx-Seite in dieser Methode abrufen? –

Antwort

2

Möglicherweise möchten Sie versuchen, die Methode Ihrer Seite machen überschrieben:

protected override void Render(HtmlTextWriter writer) 
    { 
     var sw = new System.IO.StringWriter(); 
     var tw = new HtmlTextWriter(sw); 
     base.Render(tw); 

     Response.Write(String.Format("{{\"myresponse\": {{ \"id": \"123",\"html\":\"{0}\"}}}}" 
     , Server.HtmlEncode(sw.ToString()).Replace("\n"," ")); 
     Response.Flush(); 
     Response.End(); 
    } 

Sorry für die Syntaxfehler und für die Grund Umgang mit Wagenrücklauf. Ich denke, es ist besser, die Ausgabe während page_load zu puffern (Response.BufferOutput = true)

0

Wenn Sie HTML benötigen, dann ändern Sie den Datentyp in HTML. Das Erfolgsereignis gibt dann html als Antwort zurück.

Etwas wie:

$.ajax({ 
    url: '/foo.aspx', 
    dataType: 'html', 
    success: function (data, textStatus, jqXHR) { 
      alert(data); //data is html. 
    } 
});​ 
0

Grundsätzlich Sie haben einen Httphandler erstellen, die Foo.aspx Ausgabe in Ihren JSON evenlope wickelt. Das heißt, JS-Aufruf würde "/MyWebHandler?page=foo.aspx" anstelle von nur/foo.aspx URL eingeben. Innerhalb des Handlers müssen Sie nur Ihre Seite abfragen und ihre Ausgabe ausgeben.

0

Ich änderte jbl Beispiel der überschreiben der Render-Methode ein wenig, das hat perfekt für mich gearbeitet. Ich brauchte nicht die HTML-Codierung, nur benötigt, um einige Formatierungen und fügen Sie den Inhaltstyp

  protected override void Render(HtmlTextWriter writer) 
      { 
       var sw = new System.IO.StringWriter(); 
       var tw = new HtmlTextWriter(sw); 
       base.Render(tw); 

       var html = sw.ToString();    
       html = html.Replace("\n", " "); 
       html = html.Replace("\r", " "); 
       html = html.Replace("\t", " "); 
       var data = html.Replace("\"", "\\\""); 
       data = data.Replace("/", "\\/"); 
       var json = String.Format("{{\"html\":\"{0}\"}}", data); 

       Response.ContentType = "application/json"; 
       Response.Write(json); 
       Response.Flush(); 
       Response.End(); 
      } 
Verwandte Themen