DBに2つのテーブルがあります。
その後、都市と対応するエリアのドロップダウンリストを作成したいと思います。これは私の人生で初めてのカスケードドロップダウンメニューです。いくつかの例に従おうとしました。
ViewBag.cities = db.cities.ToList();
ViewBag.areas = db.areas.ToList();
私が持っているビューで:
<div class="editor-field">
@Html.DropDownListFor(model => model.city,new SelectList(ViewBag.cities as
System.Collections.IEnumerable, "city_id", "name"),
"Select City", new { id = "ddlCars" })
@Html.ValidationMessageFor(model => model.city)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.area)
</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.area, new
SelectList(Enumerable.Empty<SelectListItem>(), "area_id", "name"),
"Select Area", new { id = "ddlModels" })
@Html.ValidationMessageFor(model => model.area)
</div>
私はあるサイトからjsファイルをコピーしました
$(document).ready(function () {
$("#ddlCars").change(function () {
var idModel = $(this).val();
$.getJSON("/Post/LoadAreasByCity", { id: idModel },
function (carData) {
var select = $("#ddlModels");
select.empty();
select.append($('<option/>', {
value: 0,
text: "Select Area"
}));
$.each(carData, function (index, itemData) {
select.append($('<option/>', {
value: itemData.Value,
text: itemData.Text
}));
});
});
});
$("#ddlModels").change(function () {
var idColour = $(this).val();
$.getJSON("/Home/LoadColoursByModel", { id: idColour },
function (modelData) {
var select = $("#ddlColours");
select.empty();
select.append($('<option/>', {
value: 0,
text: "Select a Colour"
}));
$.each(modelData, function (index, itemData) {
select.append($('<option/>', {
value: itemData.Value,
text: itemData.Text
}));
});
});
});
});
私の Post/LoadAreasByCity では、私の方法は次のとおりです。
public JsonResult LoadAreasByCity(string id)
{
PostManager pm = new PostManager();
if ( id=="") { id = "1"; }
int c_id =(int) Convert.ToInt32(id);
var areaList = pm.GetModels(c_id);
var modelData = areaList.Select(m => new SelectListItem()
{
Text = m.name,
Value = m.area_id.ToString(),
});
return Json(modelData, JsonRequestBehavior.AllowGet);
}
ビューページに都市と地域が正しく反映されていますが、データを送信した後、この行にエラーが発生します
@Html.DropDownListFor(model => model.city,new SelectList(ViewBag.cities as
System.Collections.IEnumerable, "city_id", "name"),"Select City", new { id =
"ddlCars" })
値を null にすることはできません。パラメータ名:アイテム
最後に私の投稿アクションで
int c_id = Convert.ToInt32(p.city);
int a_id = Convert.ToInt32(p.area);
area a = db.areas.Single(x=>x.area_id == a_id);
city c = db.cities.Single(s => s.city_id == c_id);
post.city = c.name;
post.area = a.name;
....Save to DB
これの問題は何ですか.....事前に感謝します