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

次のように実行できます。

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 ドキュメントを解析します (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/>");


    });
}

ただし、このようなものが機能しないことを理解していません(むしろ、すべての単一要素の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 に答える