下拉数据在更改jquery方法时不会更改

时间:2017-07-13 10:28:18

标签: jquery asp.net ajax asp.net-mvc

这里我试图根据国家/地区下拉菜单的变化从状态表中获取数据。我收到内部服务器错误。 id被传递给控制器​​方法,但数据没有返回。 这是我的代码: 查看代码:

  <div class="form-row">
                    <div class="col-md-3">Country:</div>
                    <div class="col-md-9">


                        @Html.DropDownListFor(model => model.CountryId, new SelectList(Model.Country, "Id", "Name"), "-- Select Country --", new { @class = "validate[required,maxSize[100]] select  select2insidemodal",@id="country", @onchange = "FillState()" })
                    </div>
                </div>
                <div class="form-row">
                    <div class="col-md-3">State:</div>
                    <div class="col-md-9">


                        @Html.DropDownListFor(m => m.State,
   new SelectList(Enumerable.Empty<SelectListItem>(), "StateId", "Name"),
          "Select State",
          new { @class = "form-control" })

                    </div>
                </div>

脚本代码:

  function FillState() {
        var countryId = $('#country').val();
        console.log(countryId);
        $.ajax({
            url: '/PM/Company/FillState'+'/'+countryId,
            method: "GET",
            //dataType: "JSON",
            success: function (states) {
                console.log(states);

                $("#State").html(""); // clear before appending new list 
                $.each(states, function (i, state) {
                    $("#State").append(
                        $('<option></option>').val(state.StateId).html(state.Name));
                });
            }
        });
    }

控制器方法FillState

 public ActionResult FillState(int id)
    {
        var states = _stateService.GetStates(id);
        return Json(states,JsonRequestBehavior.AllowGet);

    }

状态服务返回值,但返回Json没有返回任何东西,我在控制台上得到内部服务器错误。 当我在xhr中看到ajax请求时,它会在我打开请求详细信息时向我显示以下错误: &#39; /&#39;中的服务器错误应用

  

在序列化类型的对象时检测到循环引用   &#39; System.Data.Entity.DynamicProxies.State_6630E5941FBD9204A46907DE2F85C16BCADAC553D22FB81D0F45AD891174D200&#39;

请在这方面帮助我;

1 个答案:

答案 0 :(得分:0)

使用以下方法:

public JsonResult FillState(int? CountryId)
{
    var states = _stateService.GetStates().Where(p => p.countryId == CountryId).ToList();
    return Json(new SelectList(states.ToArray(), "StateId", "Name"), JsonRequestBehavior.AllowGet);
}

你的ajax成功函数:

 $.each(states, function (i, state) {
                    $("#State").append("<option value='" + state.StateId + "'>" + state.Name + "</option>"); });
                });