Как вернуть соответствующие результаты с JSON, чтобы заполнить каскадные выпадающие списки?
Я пытаюсь заполнить второй раскрывающийся список (который содержит округа) в зависимости от того, что выбрано в первом раскрывающемся списке (который содержит страны).
У меня есть действие контроллера под названием GetCounties:
public JsonResult GetCounties(string id)
{
DBEntities dc = new DBEntities();
JsonResult result = new JsonResult();
var filteredDivisions = from div in dc.Divisions
where div.CountryID == 1 //id
select div;
result.Data = filteredDivisions.ToList();
return Json(result.Data, JsonRequestBehavior.AllowGet);
// return Json(new[] {
// new { Id = filteredDivisions.ToArray()[0].DivisionID, Value = filteredDivisions.ToArray()[0].DivisionName },
// new { Id = 2, Value = "value 2" },
// new { Id = 3, Value = "value 3" },
//}, JsonRequestBehavior.AllowGet);
}
Обратите внимание на раздел, который закомментирован. Это прекрасно работает для меня, (я получаю первое значение из списка делений, а два других называются "значение 2" и "значение 3". Я использовал это для проверки обратного вызова, но это было единственное, что дало мне Результаты. Использование:
return Json(result.Data, JsonRequestBehavior.AllowGet);
ничего не добивается на стороне взгляда. При отладке все правильные значения присутствуют, но они не отображаются в раскрывающемся списке на стороне просмотра. Как я уже сказал, единственные результаты, которые я получаю, это использование закомментированного кода (жестко закодированные значения, которые, конечно, недостаточно хороши). Я пытался использовать циклы for для итерации по списку, чтобы заполнить массив, но ничего не работает, я получаю ошибки, такие как анонимный тип только для чтения, поэтому я не могу установить его снова.
Это мой код jquery:
$(function () {
$.getJSON('/Entity/GetCounties', function (result) {
var ddl = $('#DivisionsList');
ddl.empty();
$(result).each(function () {
$(document.createElement('option'))
.attr('value', this.Id)
.text(this.Value)
.appendTo(ddl);
});
});
});
Разумеется, список делений - это раскрывающийся список со всеми округами, который, используя приведенный выше оператор возврата без комментариев, просто возвращает без изменений, то есть содержит ВСЕ его значения, а не только те, которые должны появиться в зависимости от выбранной страны. поэтому, пожалуйста, КАК Я МОГУ НАСЕЛИТЬ Массив с отфильтрованными результатами, чтобы я мог вернуть его к просмотру, используя JSON? Я хочу использовать ЭТОТ код, который я опубликовал, так как это был ЕДИНСТВЕННЫЙ, который когда-либо работал. Мне просто нужно поменять жестко закодированные значения на правильные. вот где у меня проблемы.
Помогите мне, пожалуйста.
2 ответа
Я решил это сам. Что я сделал, это:
public JsonResult GetDivisions(int id)
{
ASNEntities dc = new ASNEntities();
JsonResult result = new JsonResult();
var filteredDivisions = from div in dc.Divisions
where div.CountryID == id
select div;
List<object> listToReturn = new List<object>();
for (int i = 0; i < filteredDivisions.Count(); i++)
{
Object[] obj = new[]{
new { Id = filteredDivisions.ToArray()[i].DivisionID, Value = filteredDivisions.ToArray()[i].DivisionName },
};
listToReturn.Add(obj[0]);
}
return Json(listToReturn.ToArray(), JsonRequestBehavior.AllowGet);
//return Json(new[] {
// new { Id = filteredDivisions.ToArray()[0].DivisionID, Value = filteredDivisions.ToArray()[0].DivisionName },
// new { Id = 2, Value = "value 2" },
// new { Id = 3, Value = "value 3" },
//}, JsonRequestBehavior.AllowGet);
}
и это прекрасно работает.
$.getJSON('/Entity/GetCounties', {id: $('#yourCountrySelect').val()},function (result) {
и теперь я прочитаю твою стенку с текстом ^^