Pregunta

He creado mi propio modelo personalizado ligante para manejar una sección DropDownList define en mi opinión como:

Html.DropDownListFor(m => m.Category.Section, new SelectList(Model.Sections, "SectionID", "SectionName"), "-- Please Select --")

Y aquí es mi carpeta modelo:

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); 
    } 
}

Ahora dentro de mi controlador de lo que puedo decir:

[HttpPost]
public ActionResult Create(FormCollection collection)
{
    var category = new Category();

    if (!TryUpdateModel(category, "Category")
        return View(new CategoryForm(category, _sectionRepository().GetAll()));

    ...
}

Esto valida bien y el valor correcto para la sección se asigna cuando se actualiza el modelo, sin embargo, no seleccionar el valor correcto si otra propiedad no valida.

te agradecería si alguien podría mostrar cómo hacer esto. Gracias

¿Fue útil?

Solución

Problema resuelto diciendo:

Html.DropDownListFor(m => m.Category.Section, new SelectList(Model.Sections.Select(s => new { Text = s.SectionName, Value = s.SectionID.ToString() }), "Value", "Text"), "-- Please Select --") 

El problema parece girar alrededor de la sección es un número entero. Cuando se convierte en una cadena todo funciona bien. Espero que esto ayude.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top