ASP.NET MVC - kundenspezifische Modell Binder für ID-Felder
-
30-09-2019 - |
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
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.