少し漠然とした質問ですが、これがどのように機能するのかわかりません。Firebug によると、私の ajax リクエストからの Json オブジェクト (配列?) は次のようになります。
{
"jsonResult":
"[
{\"OrderInList\":1},
{\"OrderInList\":2}
]"
}
これは $.getJSON ajax リクエストを通じて取得されます。
$.getJSON("/Json/GetOrderSelectList?parentCategoryId=" + postData, testData, function (jsonResult) {
$('#orderInList option').remove();
var map = {
"TestKey1": "TestValue1",
"TestKey2": "TestValue2"
};
$.each(jsonResult, function (key, value) {
$("#orderInList").append($("<option value=" + key + ">" + value + "</option>")
);
});
$.each(jsonResult) を $.each(map) に置き換えると、選択リストが正しく入力されます。そうしないと、選択リストに「未定義」と表示されます。
MVC コントローラーのこのアクションで Json をシリアル化します。
public JsonResult GetOrderSelectList(int parentCategoryId)
{
var result = Session
.QueryOver<Category>()
.Where(x => x.Parent.Id == parentCategoryId)
.OrderBy(x => x.OrderInList).Asc
.List();
var toSerialize =
result.Select(r => new {r.OrderInList});
var jsonResult = JsonConvert.SerializeObject(toSerialize);
return Json(new
{ jsonResult,
}, JsonRequestBehavior.AllowGet);
}
問題は、アクションが応答している Json の形式にあると思いますか? どんな助けでも大歓迎です!
答えを編集する
以下の両方の回答が役に立ちました。変数 jsonResult を強く入力できなかったようです。@JBabey に、json プロパティの読み取りエラーを指摘し、$.each ステートメントで関数 (キー、値) を提案してくれてありがとう。
コントローラーの整理を手伝ってくれた@Darin Dimitrovに感謝します!