問題は、オブジェクトを返しているがPortfolioResponse
、そのプロパティの値を出力ではなく、それ自体XmlPortfolioResponse
と等しくなるように設定していることです。XmlDocument
これにより、画面にバインドしたときにデフォルトの C# 出力が発生します。これは単に呼び出すだけでPortfolioResponse.XmlPortfolioResponse.ToString()
あり、オーバーロードされていない限り、Object
のクラスの名前を返します。Hense - System.Xml.XmlDocument
HTML への出力を取得しています。
何よりもまず、 .@Model.XmlPortfolioResponse.OuterXml
ではなく、ビュー ページにバインドする必要があります@Model.XmlPortfolioResponse
。@Html.Raw()
また、実際に適切にレンダリングするには、この値を呼び出しでラップする必要があります。
View ページの新しいバインディングは次のようになります。
<div class='XmlTest'></div>
<div class='XmlPortfolioResponse'>
@Html.Raw(Model.XmlPortfolioResponse.OuterXml.ToString())
</div>
JQuery の場合、それを解析するには、次のようにします。
var $title = $('.XmlPortfolioResponse').find('portfolioSummary').text();
$('.XmlTest').text($title);
ただし、未加工の XML をページにバインドし、それを解析/再フォーマット/再表示するよりも洗練されたアプローチを検討することもできます。これは、DOM の肥大化と多くの余分な処理作業につながります。2つのアプローチのいずれかをお勧めします。
1) XML を出力し、XML を直接スタイルします。CSS は、出力する XML のスタイルを設定し、必要に応じて表示することができます (フォーマットに大きな変更を加えていない場合) 。例は次のようになります。
<div class='XmlPortfolioResponse'>
<portfolioSummary>
<value>123456.78</value>
<assets>
<asset>
<ticker>XYZ</ticker>
<quantity>50</quantity>
<value>456.78</value>
</asset>
</assets>
</portfolioSummary>
</div>
この種の XML (属性は少ないが十分に正規化されている) がある場合、次のようなスタイルシートを作成できます。
portfolioSummary {
display: block;
border: 1px solid #eee;
background: #fff;
position: relative;
margin-top: 25px;
width: 100%;
height: 100%;
/* Whatever other styles you want for layout */
}
portfolioSummary value {
float: right;
font-weight: bold;
position: absolute;
top: 5px; right: 5px;
}
portfolioSummary asset {
display: block;
}
/* Etc. */
つまり、XML を直接スタイル設定します。
2) ただし、次のような XML がある場合:
<div class='XmlPortfolioResponse'>
<portfolioSummary value='123456.78'>
<asset value='456.78' ticker='XYZ'>
</asset>
</portfolioSummary>
</div>
言い換えれば、スタイリングに向いていない属性に重きを置いています... AJAX経由でデータをロードすることを検討してください。JQuery は次のように変更されます。
$.ajax({
url: '/Portfolio/Load/12345',
type: 'POST',
async: true,
success: function (data) {
if (!data) // do validation
alert('failed!');
else {
var $xml = $(data);
var $title = $xml.find('portfolioSummary').text();
$('.XmlTest').text($title);
}
},
error: function (error) {
alert('failed!');
}
});
下部のメソッドを使用するに$.ajax()
は、次のようなコントローラー メソッドが必要です。
[HttpGet] // Original Method - allows GET
public ActionResult PortfolioList {
return View(GetPortfolios()); // Or however you load them...
}
[HttpPost] // Allows this method to be accessed via POST calls
[ActionName("PortfolioList")]
public JsonResult PortfolioList_Async {
return Json(GetPortfolios()); // You may need to resolve serialization here,
// but usually it works well out of the box.
}