2012-06-22 9 views
9

Vorrei alcune indicazioni su come restituire un documento XML da un controller a una vista. A mio avviso, mi piacerebbe attraversare il documento XML usando JQuery. Ci sono molti esempi online che usano JQuery per questo uso.In ASP.NET MVC, Come restituire un documento xml a una vista

Ho un controller PortfolioList() qui sotto, che adesso restituisce appena la vista, ma vorrei capire come RETURN THE XML RESPONSE. Avrai notato di seguito che sto scrivendo la risposta XML a un file locale solo a scopo di test ...

Devo creare un modello per questo?

public ActionResult PortfolioList() 
    { 
     XmlDocument xmlResponse = new XmlDocument(); 
     XmlDocument xmlRequest = new XmlDocument(); 

     bool rzInitialized = nitializeRz(); 
     if (rzInitialized == false) 
     { 
      ViewBag.Message = "Rz Init has failed. Check if Rz is running"; 
      return View(); 
     } 
     bool rzConnected = ConnectToRz();  

     ViewBag.Message = "Here you may view a list of portfolios and exposures."; 

     // Build Portfolio Select request here ! 
     RequestBuilder rzRequest = new RequestBuilder(); 

     // REQUEST FOR PORTFOLIOS ! 
     string portfoliosRequest = rzRequest.PortfoliosRequest("Portfolios"); 
     string **portfoliosResponse** = RzClient.sendRequest(portfoliosRequest, false); 

     // DEBUG REQUESTS !! 
     if (Debugflag) 
     { 
      rzRequest.DebugOutput("portfolios", portfoliosRequest, portfoliosResponse); 
     } 
     DisconnectFromRz(); 

     return View("PortfolioList"); 
    } 
+0

Sì, si dovrebbe essere la creazione di modelli per tutte le viste che contengono tutti i dati dinamici. È sempre più pulito in questo modo. – EkoostikMartin

risposta

10

È possibile farlo come segue.

+0

Se si esegue questa operazione, a cosa assomiglia la vista? – EkoostikMartin

+0

La visualizzazione del tempo di progettazione è vuota, ma la risposta in fase di esecuzione sarà il tuoXml – Kaf

+0

Che non funzionerà con il pacchetto di OP - "A mio avviso, mi piacerebbe attraversare il documento XML usando JQuery." – EkoostikMartin

1

Se restituire il documento xml dall'azione del controller è tutto su un'idea migliore è la creazione di un risultato di azione personalizzato.

public class XmlDocumentResult: ContentResult 
{ 
    public XmlDocument XmlDocument { get; set; } 

    public override void ExecuteResult(ControllerContext context) 
    { 
     if (XmlDocument == null) 
     return; 

     Content = XmlDocument.InnerXml; 
     ContentType = "text/xml"; 
     base.ExecuteResult(context); 
    } 
} 

Ora si può tornare XML da un'azione come,

public XmlDocumentResult GetXml() 
{ 
    var xmlDoc = new XmlDocument(); 
    ... 

    return new XmlDocumentResult { XmlDocument = xmlDoc }; 
} 
+0

Mark, sembra davvero molto interessante. Ho visto questa idea pubblicata in un post simile a xml, ma stavano discutendo il MVCContrib su Codeplex (azione XmlResult). In ogni caso il post conteneva anche un override del metodo ExecuteResult(). Grazie, come sperimenterò con questo pronto !!! :-) - Bob –

+0

InnerXml non avrà l'intero documento. Questo non è corretto –

0

Basato sul consiglio di un altro sviluppatore, sto andando il percorso formato dati JSON. Risulta che restituire un documento XML da un controller asp.net a una vista è un incubo COMPLETO (cioè posso restituire il documento XML stesso al browser, ma non riesco a capire come usare jQuery per elaborare xml nodi).

Ho seguito il percorso di deserializzazione del documento XML sul lato server e di restituire un JsonResult al mio View (cioè utilizzando la routine Ajax di JQuery per chiamare nel mio controller).

esempio di codice serializzazione XML: http://msdn.microsoft.com/en-us/library/58a18dwa.aspx#Y0

0

ho trovato un jQuery codice di esempio on-line che funziona per me! L'esempio di codice analizza un documento XML come segue (l'URL è http://www.switchonthecode.com/tutorials/xml-parsing-with-jquery):

<script type="text/javascript"> 

$(document).ready(function() { 
    $.ajax({ 
     type: "GET", 
     url: "/Xml/xml_test1.xml", 
     dataType: "xml", 
     success: parseXml, 
     error: function (error) { 
      alert("Some problem."); 
     } 
    }); 
}); 

function parseXml(xml) { 
    //find every Tutorial and print the author 
    $(xml).find("Tutorial").each(function() { 
     $("#output").append($(this).find("Title").text() + "<br/>"); 
     $(this).find("Category").each(function() { 
      $("#output").append($(this).text() + "<br />"); 
     }); 
     $("#output").append("<br/>"); 


    }); 
} 

Tuttavia, non capisco una cosa del genere non funziona (ma piuttosto appena discariche l'intero innerText di ogni singolo elemento sulla mia pagina) ... dispiace per le righe di commento:

//$.ajax({ 
// url: "/Portfolios/getPortfolios", 
// type: "POST", 
// dataType: "XML", 
// async: true, 
// success: function (data) { 
//  if (!data) 
//   alert("No xml data returned."); 
//  else { 
//   var $xml = $(data); 
//   $xml.find("portfolioSummary").each(function() { 
//    $('.XmlResp').text("DUDE!");   // text($(this).text()); 
//   }); 
//   //alert($xml.text()); 

//   $('.XmlResp').text("Wow are we getting somewhere ?!!!"); 
//   $('.XmlResp').replaceWith($xml.text()); 

//  } 
// }, 
// error: function (error) { 
//  alert("failed"); 
// } 
//}); 
Problemi correlati