根据之前选择的项目asp.net mvc填充下拉列表

时间:2014-08-26 07:13:46

标签: c# asp.net asp.net-mvc

我正在尝试根据之前选择的项目填充DropDownList。为实现这一目标,我创建了三个模型

国家模式:

[Key]
public int CountryId { get; set; }
public string CountryName { get; set; }

public virtual ICollection<State> States { get; set; }

州模式:

[Key]
public int StateId { get; set; }
public string StateName { get; set; }
[ForeignKey("Country")]
public int CountryId { get; set; }

public virtual Country Country { get; set; }
public virtual ICollection<City> Citys { get; set; }

城市模特:

[Key]
public int CityId { get; set; }
public string CityName { get; set; }
[ForeignKey("State")]
public int StateId { get; set; }

public virtual State State { get; set; }

这是我的控制器:

private ProjectContext db = new ProjectContext();
//
// GET: /CascadingDropdown/

public ActionResult Index()
{
    ViewBag.CountryId = new SelectList(db.Countrys, "CountryId", "CountryName");
    return View();
}

public JsonResult StateList(int Id)
{
    var state = from s in db.States
                where s.CountryId == Id
                select s;
    return Json(new SelectList(state.ToArray(), "StateId", "StateName"), JsonRequestBehavior.AllowGet);
}

public JsonResult Citylist(int id)
{
    var city = from c in db.Citys
               where c.StateId == id
               select c;
    return Json(new SelectList(city.ToArray(), "CityId", "CityName"),   JsonRequestBehavior.AllowGet);
}
public IList<State> Getstate(int CountryId)
{
    return db.States.Where(m => m.CountryId == CountryId).ToList();
}

[AcceptVerbs(HttpVerbs.Get)]
public JsonResult LoadClassesByCountryId(string CountryName)
{
    var stateList = this.Getstate(Convert.ToInt32(CountryName));
    var stateData = stateList.Select(m => new SelectListItem()
    {
        Text = m.StateName,
        Value = m.CountryId.ToString(),
    });
    return Json(stateData, JsonRequestBehavior.AllowGet);
}

然后是我的剧本:

$(function () {
  $('#Country').change(function () {
    $.getJSON('/Cascading/StateList/' + $('#Country').val(), function (data) {
      var items = '<option>Select a State</option>';
      $.each(data, function (i, state) {
          items += "<option value='" + state.Value + "'>" + state.Text + "</option>";
      });
      $('#State').html(items);
    });
  });

  $('#State').change(function () {
    $.getJSON('/Cascading/Citylist/' + $('#State').val(), function (data) {
      var items = '<option>Select a City</option>';
      $.each(data, function (i, city) {
        items += "<option value='" + city.Value + "'>" + city.Text + "</option>";
      });
      $('#city').html(items);
    });
  });
});

最后我用这个视图显示它:

@model Test_restriction.DAL.ProjectContext
@using (Html.BeginForm())
{
  @Html.DropDownList("Country", ViewBag.CountryId as SelectList, "Select a       Country",      new { id="Country" })<br />
  <select id="State" name="state"></select><br />
  <select id="city" name="City"></select><br />
}

@section js
{
  <script src="~/Scripts/Testing.js" type="text/javascript"></script>
}

所以我更愿意发布我的所有代码,现在问题是只有第一个DropDownList国家/地区填充了其他两个DropDownList仍为空。有人可以帮助找到出错的地方吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

试试这个

查看

@model Test_restriction.DAL.CountryModel

 <script type="text/javscript">
  $(function(){
    $('#ddlcountry').change(function () {
        var sub = $('#ddlstate').val();
        if (sub != null && sub != "") {
            $('#ddlstate').html(' <option value="">--Select Topic--</option>');
            $.ajax({
                url: '/Cascading/StateList',
                data: { id: sub },
                type: 'post',
                success: function (data) {
                    if (data != null && data != "") {
                        $.each(data, function (i, item) {
                            $("#ddlstate").append($("<option></option>").val(item.value).html(item.text));
                        });
                    }
                    else {
                        $('#ddlstate').html(' <option value="">--Select State--</option>');
                    }
                }
            });
        }
        else {
            $('#ddlstate').html(' <option value="">--Select State--</option>');
        }
    });
  });
 </script>      

@Html.DropDownListFor(m => m.subject_id, (SelectList)ViewBag.Countries, "--Select Country--", new { @Class = "form-control", id = "ddlcountry" })
<select id="ddlstate" name="state_id" class="form-control">
    <option value="">--Select State--</option>
</select>

<强>控制器

public ActionResult Index()
{
    ViewBag.countries = new SelectList(db.Countrys, "CountryId", "CountryName");
    return View();
}


 public JsonResult StateList(int Id)
{
    var state = (from s in db.States
                where s.CountryId == Id
                select s).ToList();
     var list = state.Select(m => new { value = m..StateId, text = m.stateName });
    return Json(list, JsonRequestBehavior.AllowGet);
}

使用相同的方法进行城市下拉..