0

私の MVC ビュー (VS 2012 RC を使用) では、jQuery を使用してコントローラーから返された XML データを解析しようとしています。ただし、私の焦点は、jQuery の $.ajax() 関数を利用することです。 問題は、ajax がコントローラーから XML Doc を返さないことです。フォーマットされた Html を返します。

例:確か に内の自分のビューに直接返すことができますが、XML ドキュメント全体をそのように表示したくありません。たとえば、 @Model オブジェクトから XML を取得します。

@model RazorMvc.Models.PortfolioResponse
@{
    ViewBag.Title = "PortfolioList";
}              
 ...
<div class="XmlResp">
        <@Html.Raw(@Model.XmlPortfolioResponse.OuterXml.ToString())>
</div> 

ただし、XML ドキュメントを取得するには $.ajax() を使用することをお勧めします。唯一の問題は、Controller コードからの戻り値が XML ではないことです。フォーマットされた HTML テキストを返します。

これはテスト div です !!!

表示されるのは、次のようにフォーマットされた HTML です。

うわー、私たちはどこかに到達していますか?!!! 私の会社 ソリューション登録ログインホーム会社概要連絡先ポートフォリオポートフォリオリストポートフォリオ リストこれはテスト div です !!!© 2012 - 私の ASP.NET MVC アプリケーションFacebookTwitter

ここにjQueryコードがあります。DATA オブジェクトで XML ドキュメントを取得したいと考えています。

<script type="text/javascript">
    $.ajax({
        url: "/Portfolios/PortfolioList",
        type: "POST", 
        async: true,
        success: function(data){
            if (!data)
                alert("No xml data returned.");
            else{
                var $xml = $(data);
                var $title = $xml.find("portfolioSummary").text();

                $('.xmlTest').text("Wow are we getting somewhere ?!!!");
                $('.xmlTest').append($xml.text());
                alert("success!");                
            }
        },
        error: function (error) {
            alert("failed");
        }

    });

いくつかのガイダンスとアドバイスをいただければ幸いです。ありがとう、ボブ

4

2 に答える 2

1

ビューは必要ありません。コントローラー アクションから直接 XML を返すことができます。

[HttpPost]
public ActionResult PortfolioList()
{
    string xml = ...
    return Content(xml, "text/xml");
}

これで、適切なコンテンツ タイプの応答ヘッダーを設定したので、jQuery はそれを解析する方法を認識し、成功のコールバックでこの XML ストリームを直接操作できるようになります。

于 2012-06-27T18:17:17.283 に答える
0

以下に示すように、おそらく .ajax() セットアップで dataType を XML として指定する必要があります。

$.ajax({
            url: "/Portfolios/PortfolioList",
            type: "POST", 
            //add this line
            dataType: "XML",
            async: true,
            success: function(data){
                if (!data)
                    alert("No xml data returned.");
                else{
                    var $xml = $(data);
                    var $title = $xml.find("portfolioSummary").text();

                    $('.xmlTest').text("Wow are we getting somewhere ?!!!");
                    $('.xmlTest').append($xml.text());
                    alert("success!");                
                }
            },
            error: function (error) {
                alert("failed");
            }

        });

必要に応じて、この関数に関するJQuery ドキュメントの他のオプションもあります。

于 2012-06-27T18:17:04.310 に答える