Как я могу сделать возврат привязки на возвращение в JSON listboxfor к действию?
У меня есть случай, когда я создаю приложение для регистрации, есть элементы модели, которые находятся в форме флажка. Каждый флажок имеет совместно отвечающую дочернюю коллекцию/список.
Если пользователь устанавливает флажок, вызов jquery выполняется к действию контроллера для запроса списка, чтобы получить дочерние элементы и вернуть соответствующий список через JSON в список совместного ответа.
Это все прекрасно работает! Вопрос только в привязке.
Вот действие JSON, которое возвращает дочерние объекты:
[HttpGet] public ActionResult PickupKids(int id) { AccountFormEntities db = new AccountFormEntities(); var childItems = (from c in db.account_type_children where c.groupID.Equals(id) select c ).OrderBy(c => c.title) .ToList(); List<SelectListItem> SelectedAccountChildren = new List<SelectListItem>(); foreach (var item in childItems) { SelectListItem selectListItem = new SelectListItem(); selectListItem.Text = item.title; selectListItem.Value = item.id.ToString(); selectListItem.Selected = item.selected; SelectedAccountChildren.Add(selectListItem); } return Json(SelectedAccountChildren, JsonRequestBehavior.AllowGet); }
который возвращается к этому событию Jquery для заполнения списка:
//ValidateChecks(); if ($(this).prop('checked'))//---------------------magic show goes here { $('.' + checkId).css("color", "black"); $('.' + checkId).css("font-weight", "Bold"); $('.' + checkId).css("font-size", "large"); //$(divId).toggle("bounce", { times: 3 }, "slow"); $(divId).show(1000);//show the box //---AJAX/JSON var url = '@Url.Action("PickupKids")'; $.ajax({ url: url, type: 'GET', cache: false, data: { id: checkId }, dataType: "json", contentType: 'application/json; charset=utf-8', success: function (json) { $('.' + ListID).empty(); // $('.' + checkId).css("color", "gray"); $.each(json, function (index, optiondata) { $('.' + ListID).append("<option value='" + optiondata.Value + "'>" + optiondata.Text + "</option>"); }); } });
Затем список (который действительно правильно заполняется правильными дочерними элементами:
@if (Model.AccountTypes[i].Account_type_options == "BDMS") { @Html.ListBoxFor(x => x.AccountTypeChildren, Model.SelectedAccountChildren, new { @class = SelectGroupId, @style = "height:150px; width:500px" }) }
вот определения ViewModel для двух объектов модели в списке:
public List<SelectListItem> AccountTypeChildren //list of all children objects { get; set; }
public List<SelectListItem> SelectedAccountTypeChildren //list of all children objects { get; set; }
и то, что возвращается, - это выбранные идентификаторы, но он возвращает их каждый как экземпляр 'selectedAccountTypeChildren' (пример: selectedAccountTypeChildren = 10, selectedAccountTypeChildren=13), где он должен читать 'selectedaccounttypechildren[110] value=true' и т. д.
Кто-нибудь знает, как правильно привязать список? Спасибо за любую информацию
Что я уже пробовал:
Я пробовал изменять типы списков и пытаться повторять списки, но список оказывается нулевым в действии, но в fiddler он действительно показывает:
Body value AccountTypes[4].Account_type_options INB SelectedAccountTypeChildren 111 SelectedAccountTypeChildren 112
Laxmidhar tatwa technologies
это ваш код, когда заливка из ajax не использует модель.SelectedAccountChildren
@Html.ListBoxFor(x => x.AccountTypeChildren, модель.SelectedAccountChildren, новые { @класс = SelectGroupId, @стиль = "высота:150 пикселей; ширина:500 пикселей" })
insed модели.SelectedAccountChildren использует нижеприведенный вариант
@Html.ListBoxFor("child", new SelectList(string.Пустые, "значение", "текст"), "--выберите-- ребенок", новые { @класс = "форма контроля", @идентификатор = "ddlcity",@свойство tabindex="13" })
fshirt09
Интересно - я попробую это сейчас, спасибо за ответ, ввод.
fshirt09
Я думаю, что это выглядит хорошим направлением, имеет смысл сначала опустошить объект. Я получаю ошибку "no overload for listbox takes 4 arguments", работая над тем, чтобы привести предоставленный ответ в правильное соответствие аргументов прямо сейчас. Я знаю, что это звучит нубовски, но я вроде как нуб в MVC. Я ценю ваше время, вклад и терпение.