在ASP.NET MVC中,如何将xml文档返回到View

时间:2012-06-22 15:19:39

标签: asp.net-mvc

我想在将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 个答案:

答案 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");
//    }
//});