Comment puis-je contrôler la valeur tentée pour un classeur de modèles personnalisé?
-
28-10-2019 - |
Question
J'ai une action avec une signature comme celle-ci:
public ActionResult Index([ModelBinder(typeof(MyEnumModelBinder))] MyEnum myEnum)
Ce qui est implémenté comme ceci:
public class MyEnumModelBinder: IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var valueProviderResult = bindingContext.ValueProvider.GetValue("myEnum");
return valueProviderResult == null ?
MyEnum.Default :
valueProviderResult.AttemptedValue.ToMyEnum();
}
}
En gros, je lie une valeur brute à une énumération, c'est assez simple.Fonctionne très bien.
Mais, remarquez comment pour avoir accès à la valeur tentée, je dois utiliser une chaîne magique ("myEnum").
Y a-t-il un moyen de fournir ceci au classeur de modèles, alors supprimez la chaîne magique?
Parce que si je veux utiliser ce classeur de modèles à d'autres endroits, je dois m'assurer que j'appelle le paramètre "myEnum", sinon cela provoquera une erreur d'exécution.
J'ai essayé d'ajouter un ctor au classeur de modèles, mais il n'y a nulle part où je l'instancie réellement.
Des idées?
La solution
Y a-t-il un moyen de fournir ceci au classeur de modèles, alors supprimez la chaîne magique?
Bien sûr:
var valueProviderResult = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);