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?

Était-ce utile?

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);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top