1

DBに2つのテーブルがあります。 私は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

これの問題は何ですか.....事前に感謝します

4

1 に答える 1

0

ViewBag.citiesPOST アクションで同じビューを再表示したが、GET アクションで行ったようにアイテムとViewBag.areasアイテムを入力するのを忘れていたと思われます。

[HttpPost]
Public ActionResult Process()
{
    ... Save to DB

    ViewBag.cities = db.cities.ToList();
    ViewBag.areas = db.areas.ToList();   
    return View();
}
于 2012-05-07T11:39:16.520 に答える