Dropdown from JsonResult возвращает неопределенное значение - PullRequest
0 голосов
/ 25 февраля 2020

У меня есть два выпадающих списка. Один заполнен маркой автомобиля

<select id="vehicleMake" name="VehicleMake">
        @foreach (var item in Model.Cars)
        {
            if (@item.Category == 1072)
            {
                <option value="@item.UniqueId">@item.Description</option>
            }
        }
</select>

Другой пустой и должен быть заполнен моделями автомобиля

@Html.DropDownListFor(model => model.VehicleModel, Enumerable.Empty<SelectListItem>(), "Select your model", new {@id="vehicleModel" })

Это мой контроллер:

  [HttpPost]
  public JsonResult GetVehicleModels(string vehicleMake)
  {
       var vehicleModels = db.Glossaries.Where(x => x.VehicleMakeId.Contains(vehicleMake)).Select(x => x.Description).Distinct().ToList();
       SelectList list = new SelectList(vehicleModels);

       return Json(new { Success = true, Result = list }, JsonRequestBehavior.AllowGet);
  }

Это AJAX вызов:

 <script type="text/javascript">
        $("#vehicleMake").on('change', function () {
            alert($(this).val());
            $.ajax({
                type: "POST",
                url: "/Registration/GetVehicleModels",
                data: JSON.stringify({ 'vehicleMake': $(this).val() }),
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (result) {
                    result = $.parseJSON( results );
                    var toAppend = '';
                    $.each(result,function(i,o){
                        toAppend += '<option>' + o.Text + '</option>';
                    });

                     $('#vehicleModel').append(toAppend);                 
                },
                failure: function (response) {
                    alert("failure");
                },
                error: function (response) {
                    alert("error" + response.responseText);
                }
            });
        });
</script>

Это результаты, которые я получаю в Инструментах разработчика в Chrome (когда выбран «Chevrolet»)

Success: true
Result: [{Disabled: false, Group: null, Selected: false, Text: "BROUGHAM", Value: null},…]
  0: {Disabled: false, Group: null, Selected: false, Text: "BROUGHAM", Value: null}
    Disabled: false
    Group: null
    Selected: false
    Text: "BROUGHAM"
    Value: null

выпадающий список заполняется неопределенным. Что я делаю не так?

1 Ответ

0 голосов
/ 02 марта 2020

Может быть, это кому-нибудь поможет. Я использую две таблицы в моем приложении. Во-первых, я храню всю информацию, которую собираю из формы. Другой (Глоссарий) содержит марки и модели транспортных средств. У меня есть модели для обоих. Вот что я в итоге сделал.

Глоссарий модели:

  public partial class Glossary
    {
      public int UniqueId { get; set; }
      public Nullable<int> Category { get; set; }
      public string Description { get; set; } //has both makes and models descriptions
      public string VehicleMakeId { get; set; } //has references of Make's UniqueId for Models. 
    }

Вот как выглядит таблица в таблице This is what Makes looks like

Вот как выглядят модели MBW (UniqueId == 3532) в таблице enter image description here

Регистрация модели:

  [DisplayName("Vehicle Make")]
  public string VehicleMake { get; set; }
  [DisplayName("Vehicle Model")]
  public string VehicleModel { get; set; }
  public List<SelectListItem> Glossary { get; set; } //referencing Glossary model in my view model

Контроллер регистрации:

//in public ActionResult Create()    
  IEnumerable<SelectListItem> CarMake = db.Glossaries.Where(x => x.Category == 1072).Select(x => new SelectListItem
  {
    Value = x.UniqueId.ToString(),
    Text = x.Description
  });
  ViewBag.VehicleMake = CarMake;

//Json:
  [HttpPost]
  public JsonResult GetVehicleModels(string VehicleMake)
  {
    var VehicleModelList = db.Glossaries.Where(m => m.VehicleMakeId == VehicleMake).Select(m => new
    {
      VehicleModelId = m.UniqueId,
      VehicleModelDescription = m.Description
    }).ToList();

     return Json(VehicleModelList, JsonRequestBehavior.AllowGet);
  }

Просмотр:

  <div class="form-group">
    @Html.LabelFor(model => model.VehicleMake, htmlAttributes: new { @class = "control-label col-md-2 required" })
    <div class="col-md-10">
      @Html.DropDownListFor(model => model.VehicleMake, (IEnumerable<SelectListItem>)ViewBag.VehicleMake, new { @class = "form-control", required = "required" })
      @Html.ValidationMessageFor(model => model.VehicleMake, "", new { @class = "text-danger" })
    </div>
  </div>

  <div class="form-group">
    @Html.LabelFor(model => model.VehicleModel, htmlAttributes: new { @class = "control-label col-md-2 required" })
    <div class="col-md-10">
      @Html.DropDownListFor(model => model.VehicleModel, Enumerable.Empty<SelectListItem>(), "Select vehicle's make first", new { @id = "VehicleModel", @class = "form-control", required = "required" })
      @Html.ValidationMessageFor(model => model.VehicleModel, "", new { @class = "text-danger" })
    </div>
  </div>

  <script type="text/javascript">
    $("#VehicleMake").on('change', function () {
      $('#VehicleModel option').remove();

      $.ajax({
        type: "POST",
        url: "/Registration/GetVehicleModels",
        data: JSON.stringify({ 'vehicleMake': $(this).val() }),
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (result) {
          $.each(result, function (i, o) {
            $('#VehicleModel').append('<option value=' + o.VehicleModelId + '>' + o.VehicleModelDescription + '</option>');
          });
        },
        failure: function (response) {
          alert("Could not retrieve vehicle model list. ");
        },
        error: function (response) {
          alert("Something's not right... /n" + response.responseText);
        }
      });
    });
  </script>

Эта ссылка была полезной: https://www.aspsnippets.com/Articles/ASPNet-MVC-jQuery-AJAX-and-JSON-Example.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...