最初のドロップ ダウン リスト (国を含む) で選択された内容に応じて、2 番目のドロップ ダウン リスト (郡を含む) を作成しようとしています。
GetCounties というコントローラー アクションがあります。
public JsonResult GetCounties(string id)
{
DBEntities dc = new DBEntities();
JsonResult result = new JsonResult();
var filteredDivisions = from div in dc.Divisions
where div.CountryID == 1 //id
select div;
result.Data = filteredDivisions.ToList();
return Json(result.Data, JsonRequestBehavior.AllowGet);
// return Json(new[] {
// new { Id = filteredDivisions.ToArray()[0].DivisionID, Value = filteredDivisions.ToArray()[0].DivisionName },
// new { Id = 2, Value = "value 2" },
// new { Id = 3, Value = "value 3" },
//}, JsonRequestBehavior.AllowGet);
}
コメントアウトされているセクションに注意してください。それは私にとってはうまくいきます(部門リストから最初の値を取得し、他の2つは「値2」と「値3」と呼ばれます。コールバックをテストするためにそれを使用しましたが、それが私に与えた唯一のものでした使用する:
return Json(result.Data, JsonRequestBehavior.AllowGet);
ビュー側では何も達成しません。デバッグ時には、適切な値がすべて表示されますが、ビュー側のドロップダウン リストには表示されません。私が言ったように、私が得る唯一の結果は、コメントアウトされたコードを使用することです (ハードコードされた値、もちろん十分ではありません)。配列にデータを入力するために for ループを使用してリストを反復処理しようとしましたが、何も機能しません。匿名型が読み取り専用であるなどのエラーが発生するため、再度設定することはできません。
これは私のjqueryコードです:
$(function () {
$.getJSON('/Entity/GetCounties', function (result) {
var ddl = $('#DivisionsList');
ddl.empty();
$(result).each(function () {
$(document.createElement('option'))
.attr('value', this.Id)
.text(this.Value)
.appendTo(ddl);
});
});
});
Divisionslist はもちろん、すべての郡のドロップダウンであり、上記のコメントなしの return ステートメントを使用すると、変更されずに返されます。つまり、選択した国に応じて表示される値だけでなく、すべての値が含まれます。JSONを使用してビューに返すことができるように、フィルター処理された結果を配列に入力するにはどうすればよいですか? 私が投稿したこのコードを使用したいのは、これまでに機能した唯一のものだったからです。ハードコードされた値を正しい値と交換するだけです。それが私が困っているところです。
私を助けてください。