none
Convertir Html.CheckBox a valor de un Enum RRS feed

  • Pregunta

  • Hola:

     Tengo una vista en la cual debe de seleccionarse un Html.CheckBox dependiendo del valor seleccionado debe de convertirse a un enumerador que hereda de int:

    public enum Permitido : int
    {
     Si = 0, No = 1
    }
     Desconozco si esta conversión sea posible desde la vista o si debo de pasar necesariamente un valor booleano y convertir en el Controller.


    Saludos desde Monterrey, Nuevo León, México!!!

    lunes, 12 de octubre de 2015 20:58

Todas las respuestas

  • Hola JoséLuisGarcía,

    Claro que puedes, pero no tomando los valores desde el enumerador (por lo menos hasta donde entiendo) pero si colocando los valores 0 o 1 según sea que este marcado o no. Recuerda que el atributo Value especifica el valor de un campo y en el caso del elemento Checkbox el valor contenido en el atributo es el que se envía cuando el elemento está marcado, ¿y qué se envía cuando el elemento no está marcado? nada, nothing. 

    Entonces, ¿cómo enviar un valor 1 cuando el elemento no está marcado? El Helper EditorFor despliega un elemento Hidden con el valor de retorno cuando el elemento no ha sido marcado, si no hay nada marcado entonces toma el valor del elemento hidden, algo como:

    <input checked="checked" id="Permitido" name="Permitido" type="checkbox" value="0" />
    <input name="Permitido" type="hidden" value="1" />
    

    Lo que tendrías que hacer es omitir el helper y usar de manera directa el código HTML que te permita enviar los valores 0 y 1 al controlador.

    Queda claro que está tarea también podrías hacerlo de manera directa en el controlador negando el valor que se recibe:

    int valor = Convert.ToInt32(!Entidad.Permitido);

    lunes, 12 de octubre de 2015 21:51
  • hola

    pero en que sentido necesitas la conversion? es desde la view al action o en la misma view cuando trabja con el model

    hasta donde conozco, sino me equivoco el model binding lo resuelve

    podrias intntar definir en la view

    @model ClassModel
    
    @Html.BeginForm("Index" ...){
    
       @Html.CheckBoxFor(x=> x.Permitido)
    
       <input type="submit" ... />
    
    }

    y en el controller

    public class XXController{
    
       public ActionResult Index(){
    
           ClassModel model = new ClassModel();
    
           return View(model);
    
       }
    
       [HttpPost]
       public ActionResult Index(ClassModel model){
    
              //aqui codigo que recibe el check
    
              return View(..)
    
        }
    
    }

    la idea es que definas un model del tipo

    public class ClassModel{
    
        public Permitido Permitido {get;set;}
    
    }

    el modelo deberia poder mapear el valor del check con el del enum

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 13 de octubre de 2015 5:35