Domanda

Ho le seguenti entità:

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

Ora nel mio vista categoria add ho una casella di testo per inserire l'Idsezione ad esempio:

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

Mi piacerebbe creare un modello personalizzato raccoglitore di avere la logica seguente:

Se le estremità chiave modello con ID e ha un valore (un valore è stato inserito nella casella di testo) quindi impostare l'oggetto padre (Sezione in questo esempio) per Section.GetById (valore immesso) Set altro l'oggetto padre a null.

mi piacerebbe davvero apprezzato l'aiuto qui come questo mi è stato sconcertante per un po '. Grazie

È stato utile?

Soluzione 2

Utilizzando la soluzione postato da Dave thieben Sono venuto con la seguente:

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

Questo funziona bene, tuttavia non selezionare il giusto valore quando il modulo viene inviato indietro e utilizzando un elenco a discesa. Posso capire perché, ma finora i miei tentativi di risolvere il problema sono stati vani. L'apprezzerei una volta di più se potesse aiutarmi.

Altri suggerimenti

ho postato un modello legante su questa domanda che utilizza un IRepository per riempire le chiavi esterne, se sono presenti. si potrebbe modificarlo per soddisfare il vostro scopo migliore.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top