Domanda

Ho un'azione con una firma come questa:

public ActionResult Index([ModelBinder(typeof(MyEnumModelBinder))] MyEnum myEnum)

Che è implementato in questo modo:

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

Fondamentalmente, sto legando un valore grezzo a un enum, piuttosto semplice. Funziona bene.

Ma nota come per ottenere l'accesso al tentativo di valore, devo usare una stringa magica ("Myenum").

C'è un modo per fornire questo al legante del modello, quindi rimuovere la corda magica?

Perché se voglio usare questo legante modello in altri luoghi, devo assicurarmi di chiamare il parametro "Myenum", altrimenti causerà un errore di runtime.

Ho provato ad aggiungere un CTOR al legante del modello, ma non c'è nessun posto in cui lo istancio effettivamente.

Qualche idea?

È stato utile?

Soluzione

C'è un modo per fornire questo al legante del modello, quindi rimuovere la corda magica?

Sicuro:

var valueProviderResult = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top