我正在尝试使用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中的文本对象一起更改,相反,我正在获取[object object],[object object]的值
答案 0 :(得分:0)
因为返回Text
和Value
(大写的第一个字符)
并且每个参数使用2个参数index
和item
,第二个参数项对象应将名称更改为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));
});