2012-06-22 33 views
9

我希望將XML文檔從控制器返回到視圖的一些指導。 在我看來,我想使用JQuery來遍歷XML文檔。有很多使用JQuery的在線示例用於此用途。在ASP.NET MVC中,如何將xml文檔返回到視圖

我有一個PortfolioList()控制器下面,它現在只是返回視圖,但我想弄清楚如何返回XML響應。您將在下面注意到,我正在將XML響應寫入本地文件,僅用於測試目的...

我是否需要爲此乾淨地創建模型?

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

是的,您應該爲包含任何動態數據的所有視圖創建模型。這樣總是很乾淨。 – EkoostikMartin

回答

10

您可以這樣做,如下所示。

public ActionResult PortfolioList() 
{ 
    //Your code 
    .... 
    return this.Content(yourXml, "text/xml"); 
} 
+0

如果你這樣做,視圖是什麼樣的? – EkoostikMartin

+0

設計時間視圖爲空,但運行時響應將爲yourXml – Kaf

+0

這對OP的用例不起作用 - 「在我看來,我想用JQuery遍歷XML文檔。」 – EkoostikMartin

1

如果從控制器動作返回xml文檔是所有關於更好的想法創建自定義動作結果。

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); 
    } 
} 

現在你可以從行動返回XML,

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

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

馬克,這看起來確實很有趣。我已經看到這個想法張貼在一個類似的XML相關的帖子,但他們正在討論Codeplex上的MVCContrib(XmlResult操作)。在任何情況下,該文章還包含對ExecuteResult()方法的覆蓋。謝謝,因爲我會試用這個pronto! :-) - Bob –

+0

InnerXml將不具有整個文檔。這是不正確的。 –

0

基於其他開發者的建議,我會JSON數據格式的路線。事實證明,返回一個XML文檔從一個asp.net控制器返回到一個視圖是一個完整的噩夢(即我可以返回XML文檔本身的瀏覽器,但我不知道如何使用jQuery來處理XML節點)。

我走了反序列化服務器端的XML文檔,並返回一個JsonResult到我的視圖(即使用JQuery的Ajax例程調用我的控制器)的路線。

示例XML序列化代碼:http://msdn.microsoft.com/en-us/library/58a18dwa.aspx#Y0

0

我發現一個jQuery的代碼示例在線這對我的作品! 如下的代碼示例解析的XML文檔(網址爲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/>"); 


    }); 
} 

不過,我不明白這樣的事情不能正常工作(而只是轉儲的每一個整個的innerText單個元素到我的頁面上)...對於註釋行感到抱歉:

//$.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"); 
// } 
//});