JavaScriptSerializer
を使用してオブジェクトをJSONに変換していますが、サーバーコードでこのJSON出力を確認できます。
[{"UserId":1,"UserName":"Admin"}]
しかし、UIでは以下のようなものに変換されています
[{"UserId":1,"UserName":"Admin"}].
それらをエスケープする方法"
?
Razorビューエンジンを使用している場合は、_Html.Raw
_メソッドを使用する必要があります。
_<script type="text/javascript">
var model = @Html.Raw(Json.Encode(Model));
</script>
_
より短く、new JavaScriptSerializer().Serialize()
と同等の_Json.Encode
_メソッドの使用に注意してください。
どうしてそんなことをするのか?なぜ JsonResult
を返さないのですか?
public ActionResult MyMethod()
{
List<ListItem> list = new List<ListItem>() {
new ListItem() { UserId = "1", UserName = "Admin" },
new ListItem() { UserId = "2", UserName = "JohnDoe" },
new ListItem() { UserId = "3", UserName = "JaneDoe" }};
return this.Json(list);
}
ダリン・ディミトロフの答えについてもう一つだけ。私のVS2012では、セミコロンにコンパイルエラーがあります。JS側からのステートメントは実際には「var model =;」だからです。一対の引用を使用して、Razor部分を次のようにラップする方法:
var model = "@Html.Raw(Json.Encode(Model))";
これによりエラーは発生しません。
Json.Encode()はJavaScriptSerializerのラッパー関数のようです。後者の方が時間効率が良いかどうかはわかりません。