在使用Ajax的视图中,无法将数据列表从控制器返回到下拉列表。我收到未定义的未定义错误

时间:2019-04-27 00:00:56

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

我正在尝试使用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)
                    }
                });

enter image description here

我期望下拉列表的值将与listofiteam中的文本对象一起更改,相反,我正在获取[object object],[object object]的值

enter image description here

1 个答案:

答案 0 :(得分:0)

因为返回TextValue(大写的第一个字符)

并且每个参数使用2个参数indexitem,第二个参数项对象应将名称更改为val,并且在每个循环中均不得与value变量重复。

val.Value设置为值属性,将val.Text设置为文本。

使用value.result,因为在MVC操作中返回Json包含2个属性。

您可以更改为

$.each(value.result, function (key, val) {
                            alert(val.Text + val.Value);
                            $('#stime')
                                .append($("<option></option>")
                                    .attr("value", val.Value)
                                    .text(val.Text));
                        });