Question

J'ai les entités suivantes:

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

Maintenant dans mon point de vue Ajouter une catégorie j'ai une zone de texte pour entrer dans le SectionID par exemple:

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

Je voudrais créer un modèle de liaison personnalisé pour avoir la logique suivante:

Si les extrémités de clé modèle avec ID et a une valeur (une valeur a été insérée dans la zone de texte) puis définissez l'objet parent (section dans cet exemple) à Section.GetById (valeur entrée) jeu d'autre l'objet parent null.

J'apprécierais vraiment l'aide ici car cela m'a été déconcertant pendant un certain temps. Merci

Était-ce utile?

La solution 2

En utilisant la solution affichée par dave thieben Je suis venu avec ce qui suit:

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

Cela fonctionne bien, mais il ne choisit pas la bonne valeur lorsque le formulaire est affiché en arrière et en utilisant une liste déroulante. Je peux voir pourquoi, mais jusqu'à présent mes tentatives pour y remédier ont été vains. Je vous en serais reconnaissant une fois de plus si vous pouvez aider.

Autres conseils

j'ai posté un classeur modèle sur cette question qui utilise un IRepository pour remplir les clés étrangères si elles sont présentes. vous pouvez le modifier en fonction de votre objectif mieux.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top