Пользовательская модель Binder для DropDownlist не выбирает правильное значение
-
30-09-2019 - |
Вопрос
Я создал свой собственный Custom Model Binder для обработки выпадающего списка раздела, определенный на мой взгляд, как:
Html.DropDownListFor(m => m.Category.Section, new SelectList(Model.Sections, "SectionID", "SectionName"), "-- Please Select --")
А вот моя модель связующего:
public class SectionModelBinder : DefaultModelBinder
{
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
if (bindingContext.ModelType.IsAssignableFrom(typeof(Section)) && value != null)
{
if (Utilities.IsInteger(value.AttemptedValue))
return Section.GetById(Convert.ToInt32(value.AttemptedValue));
else if (value.AttemptedValue == "")
return null;
}
return base.BindModel(controllerContext, bindingContext);
}
}
Сейчас в моем контроллере я могу сказать:
[HttpPost]
public ActionResult Create(FormCollection collection)
{
var category = new Category();
if (!TryUpdateModel(category, "Category")
return View(new CategoryForm(category, _sectionRepository().GetAll()));
...
}
Это подтверждается хорошо, и правильное значение для раздела назначается, когда модель обновляется, однако она не выбирает правильное значение, если другое свойство не подтверждает.
Я был бы признателен, если кто-то может показать мне, как это сделать. Спасибо
Решение
Проблема решена, говоря:
Html.DropDownListFor(m => m.Category.Section, new SelectList(Model.Sections.Select(s => new { Text = s.SectionName, Value = s.SectionID.ToString() }), "Value", "Text"), "-- Please Select --")
Проблема, кажется, решается вокруг разбрызгивания, являющегося целым числом. Когда вы преобразуете его в строку, все работает нормально. Надеюсь это поможет.
Не связан с StackOverflow