Пользовательская модель Binder для DropDownlist не выбирает правильное значение

StackOverflow https://stackoverflow.com/questions/3642870

Вопрос

Я создал свой собственный 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 --") 

Проблема, кажется, решается вокруг разбрызгивания, являющегося целым числом. Когда вы преобразуете его в строку, все работает нормально. Надеюсь это поможет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top