9

我想要一些关于将 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");
    }
4

4 回答 4

10

You can do it as follows.

public ActionResult PortfolioList()
{
    //Your code
    ....
    return this.Content(yourXml, "text/xml");
}
于 2012-06-22T15:27:49.250 回答
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 };
}
于 2012-06-22T15:54:56.927 回答
0

根据另一位开发人员的建议,我将采用 Json 数据格式路线。事实证明,将 XML 文档从 asp.net 控制器返回到视图是一场彻头彻尾的噩梦(即我可以将 XML 文档本身返回给浏览器,但我不知道如何使用 jQuery 来处理 xml 节点) .

我已经在服务器端反序列化 XML 文档,并将 JsonResult 返回到我的视图(即使用 JQuery 的 Ajax 例程调用我的控制器)。

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

于 2012-07-13T15:25:44.370 回答
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");
//    }
//});
于 2012-07-17T18:48:09.403 回答