Невозможно вернуть список данных из контроллера в раскрывающийся список в представлении с использованием Ajax.Я получаю неопределенную неопределенную ошибку - PullRequest
1 голос
/ 27 апреля 2019

Я пытаюсь восстановить список значений для выпадающего списка из контроллера с помощью вызова Ajax, и он возвращает данные обратно к методу успеха. Но я не вижу текст или значение в выпадающем списке.

Это код моего контроллера, внизу я возвращаю listofiteam для просмотра.

        List<SelectListItem> listoftime = new List<SelectListItem>();
        if (duration == 1)
        {
            for(int i=9;i<23;i++)
            {
                var st = date.Where(m => m.StartTime.Value.Hours == i);
                int countst = st.Count();

                if(countst==1)
                {
                    var et = st.Select(m => m.Endtime.Value.Hours).SingleOrDefault();
                    i = Convert.ToInt32(et);
                }

                if(countst==0)
                {
                    listoftime.Add(new SelectListItem
                    {
                        Text = "\"" + i + " to " + (i + 1) + "\"",
                        Value = i.ToString()
                    });
                }

            }
        }

        return Json(new { result = listoftime, status = "Success" }, 
          JsonRequestBehavior.AllowGet);
    }

/////////////////////////////////////////////// ////////////////////////////////////////////////// ////////////////////////////////////////////////// ////////////

<div class="col-md-10">
                @Html.DropDownListFor(m => m.ScheduledTime,new List<SelectListItem>
               {
              new SelectListItem{Text="09:00 AM",Value="09:00"},
              new SelectListItem{Text="10:00 AM",Value="10:00"},
              new SelectListItem{Text="11:00 AM",Value="11:00"},
              new SelectListItem{Text="12:00 AM",Value="12:00"},
              new SelectListItem{Text="13:00 PM",Value="13:00"},
              new SelectListItem{Text="14:00 PM",Value="14:00"},
              new SelectListItem{Text="15:00 PM",Value="15:00"},
              new SelectListItem{Text="16:00 PM",Value="16:00"},
              new SelectListItem{Text="17:00 PM",Value="17:00"},
              new SelectListItem{Text="18:00 PM",Value="18:00"},
              new SelectListItem{Text="19:00 PM",Value="19:00"},
              new SelectListItem{Text="20:00 PM",Value="20:00"},
              new SelectListItem{Text="21:00 PM",Value="21:00"},
              new SelectListItem{Text="22:00 PM",Value="22:00"}

               }, "--Select start time--", new { @class = "form-control", id="stime" })
                @Html.ValidationMessageFor(model => model.ScheduledTime, "", new { @class = "text-danger" })
            </div>

/////////////////////////////////////////////// ////////////////////////////////////////////////// ////////////////////////////////////////////////// ////////

Это код, в котором я пытаюсь заполнить раскрывающиеся значения значениями текстового объекта в listofiteam

          $.ajax({
          url: '@Url.Action("checkavailabletime","customer")',
       data: { sdate: scheduledate, dvalue: duration, tvalue: TrainerId },
                    type: "POST",
                    success: function (value) {
                        console.log(value);
                        alert();
                        $("#stime").empty();
                        $.each(value, function (key, value) {
                            alert(key.text + value.value);
                            $('#stime')
                                .append($("<option></option>")
                                    .attr("value", key)
                                    .text(value));
                        });
                    },
                    error: function (result) {
                        alert("error" + result)
                    }
                });

введите описание изображения здесь

Я ожидаю, что раскрывающиеся значения будут изменены с помощью текстового объекта из listofiteam, вместо этого я получаю значения [объект объекта], [объект объекта]

enter image description here

1 Ответ

1 голос
/ 27 апреля 2019

Потому что ваше возвращение Text и Value (заглавные буквы)

И каждый использует 2 параметра index и item, объект второго параметра должен изменить имя на val, не дублируя переменную value в каждом цикле.

Установите val.Value в значение атрибута и val.Text в текст.

Использовать value.result, поскольку возвращаемый Json в действии MVC включает 2 свойства.

Вы можете изменить на

$.each(value.result, function (key, val) {
                            alert(val.Text + val.Value);
                            $('#stime')
                                .append($("<option></option>")
                                    .attr("value", val.Value)
                                    .text(val.Text));
                        });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...