Frage

ich habe folgende Einheiten:

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

Jetzt in meiner Kategorie hinzufügen Ansicht habe ich eine Textbox die sectionid zB ein:

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

Ich möchte ein benutzerdefiniertes Modell Binder erstellen die folgende Logik haben:

Wenn das Modell Schlüssel Ende mit ID und einen Wert (ein Wert in das Textfeld eingefügt wurde), dann das Objekt übergeordneten Satz (Abschnitt in diesem Beispiel) Section.GetById (Wert eingegeben) else set das übergeordnete Objekt zu null.

Ich würde wirklich die Hilfe hier zu schätzen wissen, da dies wurde mir für eine Weile verwirrenden. Dank

War es hilfreich?

Lösung 2

, um die Lösung von dave geschrieben Mit Thieben ich habe kommen mit dem folgenden:

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

Das funktioniert gut, aber es nicht den richtigen Wert wählen, wenn das Formular zurück gebucht wird und ein Drop-Down-Liste. Ich kann sehen, warum, aber so weit meine Versuche, es zu beheben ist vergeblich gewesen. Ich würde schätzen es einmal mehr, wenn Sie helfen könnten.

Andere Tipps

Ich stellte ein Modell Bindemittel auf diese Frage , die eine IRepository verwendet Fremdschlüssel zu füllen, wenn sie vorhanden sind. Sie können es ändern, Ihren Zweck besser gerecht zu werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top