Я хочу заполнить второе раскрывающееся меню с первого.JQuery возвращает значение «undefined» .net core
Все работает, но названия городов и значения просто возвращают «неопределенные». * Количество городов возвращается правильно, но имя и значение всегда «не определены». *
Контроллер:
[HttpPost]
public ActionResult getCityJson(string stateId)
{
int _stateid = Convert.ToInt32(stateId);
List<Cities> objcity = new List<Cities>();
objcity = _db.Cities.Where(m => m.stateID == _stateid).ToList();
SelectList obgcity = new SelectList(objcity, "CityID", "CityName", 0);
return Json(obgcity);
}
View Page:
$("#istateid").change(function() {
var id = $("#istateid").val();
$.ajax({
url: '@Url.Action("getCityJson", "Home")',
data: { stateId: id },
cache: false,
type: "POST",
success: function (data) {
var markup = "<option value='0'>Select City</option>";
for (var x = 0; x < data.length; x++) {
markup += "<option value=" + data[x].Value + ">" + data[x].Text + "</option>";
}
$("#icityid").html(markup).show();
},
error: function (reponse) {
alert("error : " + reponse);
}
});
});
Я также попытался Public JsonResult и вернуться JsonResult и общественной SelectList и вернуть SelectList, но ни один из них не работал.
И я также попытался это:
$("#istateid").change(function() {
$.ajax({
type: "POST",
url: '@Url.Action("getCityJson", "Home")',
data: { stateId: $("#istateid > option:selected").attr("value") },
success: function (data) {
var items = [];
items.push("<option>--Choose Your City--</option>");
$.each(data, function() {
items.push("<option value=" + this.Value + ">" + this.Text + "</option>");
});
$("#icityid").html(items.join(' '));
}
}) });
Я получаю это в браузере: (TypeError:. Данные [х] не определено)
$("#istateid").change(function() {
var id = $("#istateid").val();
$.ajax({
url: '/Home/getCityJson',
data: { stateId: id },
cache: false,
type: "POST",
success: function (data) {
var markup = "<option value='0'>Select City</option>";
for (var x = 0; x < data.length; x++)
{ markup += "<option value=" + data[x].CityID + ">" + data[x].CityName + "</option>"; }
$("#icityid").html(markup).show();
},
error: function (reponse) {
alert("error : " + reponse);
}
});
});
<option value="0">Select City</option>
<option value="undefined">undefined</option>
<option value="undefined">undefined</option>
<option value="undefined">undefined</option>
Конечно, они не определены. Вы даже посмотрели данные json перед написанием кода javascript? Вы возвращаете объект City, который может иметь свойства типа «Name» или «CityId», но в вашем коде вы получаете доступ к «Value» и «Text». Вам либо нужно создать новую модель (или вернуть анонимную модель), либо использовать свойства ** Model **, а не Value/Text. На стороне примечания, не вызывайте код синхронизации в вашем методе, используйте async полностью. он блокирует поток запросов и снижает общую производительность и масштабируемость. – Tseng
Попробуйте этот параметр для for (var x = 0; x "+ data [x] .CityName +" "; } ' –
Еще не определено. Я тоже пробовал. this.Value, this.Text, но ничего не работает. Когда я просто набираю «this», он возвращает [Object object] – Neok