多くのチュートリアルと Cascading DropDownLists へのさまざまなアプローチを確認した後、View の ViewModel を作成し、この投稿に基づいて DropDownLists にデータを入力することにしました: MVC3 AJAX Cascading DropDownLists
ここでの目標は最も基本的なものであり、多くのチュートリアルでカバーされていますが、まだ完全には理解できません... State ドロップダウンの値に基づいて City ドロップダウンを設定することです。
編集:
このリクエストを投稿して以来、私は Firebug を発見しました (そうです、これは私があらゆる種類のプログラミングを行うのに慣れていないためです)。コントローラーを正常に呼び出して、必要なデータを取得していることを確認できました。問題は、ビューにデータを返す JavaScript の後半にあると思います。
これが私の見解です:
<label>STATE HERE:</label>
@Html.DropDownListFor(x => x.States, Model.States, new { @class = "chzn-select", id = "stateID" })
<br /><br />
<label>CITY HERE:</label>
@Html.DropDownListFor(x => x.Cities, Enumerable.Empty<SelectListItem>(), new { id = "cityID" })
ビュー内の JavaScript は次のとおりです。結果を取得すると、どういうわけか結果を正しく処理できません。
$(function () {
$("#stateID").change(function () {
var stateId = $(this).val();
// and send it as AJAX request to the newly created action
$.ajax({
url: '@Url.Action("GetCities")',
type: 'GET',
data: { Id: stateId },
cache: 'false',
success: function (result) {
var citySelect = $('#cityID');
$(citySelect).empty();
// when the AJAX succeeds refresh the ddl container with
$.each(result, function (result) {
$(citySelect)
.append($('<option/>', { value: this.simpleCityID })
.text(this.cityFull));
});
},
error: function (result) {
alert('An Error has occurred');
}
});
});
});
JavaScript によって呼び出されるコントローラーは次のとおりです。
public JsonResult GetCities(int Id)
{
return Json(GetCitySelectList(Id), JsonRequestBehavior.AllowGet);
}
private SelectList GetCitySelectList(int Id)
{
var cities = simpleDB.simpleCity.Where(x => x.simpleStateId == Id).ToList();
SelectList result = new SelectList(cities, "simpleCityId", "cityFull");
return result;
}
これは、Firbug からの結果です。これは、DropDownList を正しく設定していないだけで、問題なくデータを構築して取得していることを示しています。
[{"Selected":false,"Text":"Carmel","Value":"IN001"},{"Selected":false,"Text":"Fishers","Value":"IN002"}]
JavaScript がドロップダウンに入力できない理由について何か提案があれば、コメントしてください。