我想在将XML文档从控制器返回到视图时提供一些指导。 在我看来,我想使用JQuery遍历XML文档。有很多使用JQuery的在线示例用于此用途。
下面有一个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 :(得分:10)
您可以按照以下方式执行此操作。
public ActionResult PortfolioList()
{
//Your code
....
return this.Content(yourXml, "text/xml");
}
答案 1 :(得分: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 };
}
答案 2 :(得分:0)
基于其他开发人员的建议,我将使用Json数据格式路由。事实证明,从一个asp.net控制器返回一个XML文档回到一个视图是一个完整的噩梦(即我可以将XML文档本身返回给浏览器,但我无法弄清楚如何使用jQuery来处理xml节点。)
我已经走了在服务器端反序列化XML文档的路径,并将JsonResult返回到我的View(即使用JQuery的Ajax例程调用我的控制器)。
示例XML序列化代码:http://msdn.microsoft.com/en-us/library/58a18dwa.aspx#Y0
答案 3 :(得分: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");
// }
//});