Unterstrich String Model Binder
Ich hatte den Eindruck, dass beim Binden an ein komplexes Modell alle öffentlichen Eigenschaften verarbeitet und für jede eine Übereinstimmungsbindung versucht wurde.
Ich versuche, ein Variablenbenennungsproblem zu lösen, damit ein Modell entsteht
class Model {
public string Foo {get;set;}
public string FooBar {get;set;}
}
funktioniert gut mit einem Abfrage-String wie
?foo=foo&foo_bar=foo_bar
Gibt es einen besseren Weg als mit einem benutzerdefinierten Modellordner? Auf jeden Fall funktioniert meins nicht. FooBar wird einfach übersprungen.
public class StringModelBinder : DefaultModelBinder
{
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var model = base.BindModel(controllerContext, bindingContext);
if (model != null)
return model;
var modelName = Regex.Replace(bindingContext.ModelName, "([a-z])([A-Z])", "$1_$2").ToLowerInvariant();
var value = bindingContext.ValueProvider.GetValue(modelName);
return value;
}
}
Registriert mit
ModelBinders.Binders.Add(typeof(string), new StringModelBinder());