Pregunta

Tengo una acción con una firma como esta:

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

Que se implementa así:

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

Básicamente, estoy vinculando un valor bruto a un enum, bastante simple. Funciona bien.

Pero, observe cómo para obtener acceso al valor intento, necesito usar una cadena mágica ("Myenum").

¿Hay alguna forma de suministrar esto a la carpeta del modelo, así que elimina la cadena mágica?

Porque si quiero usar esta carpeta modelo en otros lugares, tengo que asegurarme de llamar al parámetro "Myenum", de lo contrario causará un error de tiempo de ejecución.

Intenté agregar un CTOR a la carpeta modelo, pero no hay ningún lugar donde realmente lo instanciaré.

¿Algunas ideas?

¿Fue útil?

Solución

¿Hay alguna forma de suministrar esto a la carpeta del modelo, así que elimina la cadena mágica?

Por supuesto:

var valueProviderResult = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top