Pregunta

Tengo las siguientes entidades:

public class Category
{
    public virtual int CategoryID { get; set; }

    [Required(ErrorMessage = "Section is required")]
    public virtual Section Section { get; set; }

    [Required(ErrorMessage = "Category Name is required")]
    public virtual string CategoryName { get; set; }
}

public class Section
{
    public virtual int SectionID { get; set; }
    public virtual string SectionName { get; set; }
}

Ahora dentro de mi categoría Añadir vista tengo un cuadro de texto para introducir el sectionid por ejemplo:

<%= Html.TextBoxFor(m => m.Section.SectionID) %>

Me gustaría crear una carpeta de modelo personalizado para tener la lógica siguiente:

Si los extremos clave modelo con el ID y tiene un valor (se insertó un valor en el cuadro de texto) a continuación, establecer el objeto padre (Sección en este ejemplo) a Section.GetById (valor introducido) conjunto de lo contrario el objeto padre a nulo.

Te lo agradecería la ayuda aquí, ya que me ha sido desconcertante por un tiempo. Gracias

¿Fue útil?

Solución 2

El uso de la solución publicado por Dave thieben i han llegado con lo siguiente:

public class CustomModelBinder : DefaultModelBinder
{
    public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);

        if (bindingContext.ModelType.Namespace.EndsWith("Models.Entities") && value != null && (Utilities.IsInteger(value.AttemptedValue) || value.AttemptedValue == ""))
        {
            if (value.AttemptedValue != "")
                return Section.GetById(Convert.ToInt32(value.AttemptedValue));
            else
                return null;
        }
        else
            return base.BindModel(controllerContext, bindingContext);
    }
}

Esto funciona muy bien, sin embargo, no seleccionar el valor correcto cuando el formulario se devuelve y el uso de una lista desplegable. Puedo ver por qué, pero hasta ahora mis intentos de solucionarlo han sido en vano. Te agradecería que, una vez más si usted podría ayudar.

Otros consejos

he publicado un ligante modelo en esta pregunta que utiliza un IRepository para llenar las claves externas si están presentes. usted podría modificarlo para adaptarlo a su propósito mejor.

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