none
como capturar radiobutton .net MVC ? RRS feed

  • Pregunta

  • Buen dia,

    tengo el siguiente inconveniente, cree un modelo 

    public virtual List<string> rspsta { get; set; }
    public virtual List<bool> rspstaCrrcta { get; set; } 

    y usando este modelo intento capturar 4 textbox en los cuales se digitan las opciones de respuesta y tambien hay 4 radiobutton que quiero usar para escoger la opcion correcta.

    cuando envio estos al controlador usando un html.beginform y haciendo debug encuentro que el me recibe el valores de los 4 textbox y los acomoda en una lista, sin embargo esto mismo no ocurre con los radiobuttons, me gustaria poder recibir los valores que estan en falso y el valor verdadero correspondiente a la respuesta correcta, pero no se como poder hacer esto.

    Agradezco la colaboración.

    lunes, 31 de octubre de 2016 12:22

Respuestas

  • Hola, si recuperas los datos enviados a través de FormCollection (modifica tu acción del controlador para en vez de usar como parámetro el Modelo, recuperar el FormCollection) únicamente recuperarás el valor del readiobutton seleccionado. 

    [HttpPost]
    public ActionResult AccionControlador(FormCollection fc)
    {
    
      string answerA = fc["Answer1"];
      string answerB = fc["Answer2"];
      string answerC = fc["Answer3"];
      string answerD = fc["Answer4"];
      return View();
    }
    Puedes poner el codigo de tu View y del Controller? gracias


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    lunes, 31 de octubre de 2016 12:49
    Moderador
  • hola

    el radiobutton enviara al action una seleccion simple, no una lista, por lo tanto el model que reciba los valores debera ser una variable simple

    Create RadioButton using HtmlHelper

    veras que el id de los controles es el mismo, por lo tanto si defines en el action una propiedad del name del radiobutton capturara el valor

    Passing selected value from the radio buttons to the controller in MVC

    en la respuesta veras como la propiedad del model es simple, no una lista

    los radiobutton debe definir el name todos iguales

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 31 de octubre de 2016 12:57
  • Lo que pasa es que eso es lo que tienes en tu lógica, que solo se capture cuando lo seleccionen :

    @Html.RadioButtonFor(x=> x.respuestas.rspstaCrrcta, false)

    Esto lo que hace es que cuando seleccionar este Radio le pone false, sino lo seleccionas no tendra ningun valor,

    lo que te recomiendo que hagas, es que pongas uno por default seleccionado siempre y los demás valores

    lo capturaras cuando lo selecciones.

    Saludos.


    Si mi respuesta te ha ayudado a resolver tus problemas, Selecciona "Proponer como respuesta"

    Blog
    J.Joaquin

    lunes, 31 de octubre de 2016 14:03

Todas las respuestas

  • Hola, si recuperas los datos enviados a través de FormCollection (modifica tu acción del controlador para en vez de usar como parámetro el Modelo, recuperar el FormCollection) únicamente recuperarás el valor del readiobutton seleccionado. 

    [HttpPost]
    public ActionResult AccionControlador(FormCollection fc)
    {
    
      string answerA = fc["Answer1"];
      string answerB = fc["Answer2"];
      string answerC = fc["Answer3"];
      string answerD = fc["Answer4"];
      return View();
    }
    Puedes poner el codigo de tu View y del Controller? gracias


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    lunes, 31 de octubre de 2016 12:49
    Moderador
  • hola

    el radiobutton enviara al action una seleccion simple, no una lista, por lo tanto el model que reciba los valores debera ser una variable simple

    Create RadioButton using HtmlHelper

    veras que el id de los controles es el mismo, por lo tanto si defines en el action una propiedad del name del radiobutton capturara el valor

    Passing selected value from the radio buttons to the controller in MVC

    en la respuesta veras como la propiedad del model es simple, no una lista

    los radiobutton debe definir el name todos iguales

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 31 de octubre de 2016 12:57
  • @using (Html.BeginForm("Create", "Preturnos", FormMethod.Post, new { @class = "FormularioPreguntas" })) { <span id="validation" style="color: red">@Html.ValidationSummary(true)</span> <div class="Ans1"> @Html.TextBoxFor(x=> x.respuestas.rspsta) @Html.RadioButtonFor(x=> x.respuestas.rspstaCrrcta, false) </div> <div class="Ans2"> @Html.TextBoxFor(x=> x.respuestas.rspsta) @Html.RadioButtonFor(x=> x.respuestas.rspstaCrrcta, false) </div> <div class="Ans1"> @Html.TextBoxFor(x=> x.respuestas.rspsta) @Html.RadioButtonFor(x=> x.respuestas.rspstaCrrcta, false) </div> <div class="Ans4"> @Html.TextBoxFor(x=> x.respuestas.rspsta) @Html.RadioButtonFor(x=> x.respuestas.rspstaCrrcta, false) </div> <br /> <input type="submit" class="Guardar" value="Guardar Preturno"> }

    Controller

    [HttpPost]
            public ActionResult Create(Rspstas model)
            {
                
            }

    aun no he puesto nada en en el controller sin embargo asi como esta puedo notar que en Rspstas capturo los 4 textbox de las opciones de respuesta, pero de la respuesta correcta solo me captura el radiobutton seleccionado.

    mi idea es poder tener una lista algo asi

    opcion      opc1    opc2   opc3  opc4

    correcta      0         0        1       0

    index          0         1        2       3

    hay posiciones del  al 3 los textbox opc1 al opc4 y el bool si es correcto o no.

    aunque si tienes alguna otra idea genial

    lunes, 31 de octubre de 2016 13:02
  • Lo que pasa es que eso es lo que tienes en tu lógica, que solo se capture cuando lo seleccionen :

    @Html.RadioButtonFor(x=> x.respuestas.rspstaCrrcta, false)

    Esto lo que hace es que cuando seleccionar este Radio le pone false, sino lo seleccionas no tendra ningun valor,

    lo que te recomiendo que hagas, es que pongas uno por default seleccionado siempre y los demás valores

    lo capturaras cuando lo selecciones.

    Saludos.


    Si mi respuesta te ha ayudado a resolver tus problemas, Selecciona "Proponer como respuesta"

    Blog
    J.Joaquin

    lunes, 31 de octubre de 2016 14:03
  • hola

    lo que noto es que en la view defiens dos radiobutton sobre la misma lista rspstaCrrcta y eso no va a funcionar

    salvo que cambiens el name de los radiobutton para que la seleccion impacte en una propiedad nueva del model

    el model del action que recibe el post debe cambiar

    @Html.RadioButtonFor(x=> x.respuestas.rspstaCrrcta, false, new {@Name="respuestas1"})

    entonces en el model del action debes definir la propiedad que toma ese valor

    public string respuestas1 {get;set;}

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 31 de octubre de 2016 14:17
  • Hay algo que no entiendo,

    yo cree el modelo inicialmente con dos campos,  Respuesta y RespuestaCorrecta, String y bool respectivamente, y en el formulario estoy pidiendo 4 registros, si yo en el modelo coloco List<string> Respuesta { get; set;} el me toma el valor de los 4 textbox sin problema, pero si hago de igual manera con el campo de tipo bool no puedo almacenar los datos en List<> , tampoco si cambio el tipo de dato a string o int.

    no cree en el modelo algo como:

    respuesta1

    respuesta2

    respuesta3

    respuesta4

    correcta1

    correcta2

    correcta3

    correcta4

    dado que si en algun momento el cliente desea ingresar mas respuestas o menos solo tendria que aumentar o dismunuir la cantidad de campos en la vista.

    entonces no entiendo por que con List<string> si me toma todos los valores.

    dime si tu tienes alguna idea de como hacerlo? o hacerlo de otra forma.... tal vez me estoy complicando sin saberlo.

    Agradezco tu colaboración


    • Editado Jeff M Quintero lunes, 31 de octubre de 2016 16:56 faltaba informacion
    lunes, 31 de octubre de 2016 16:52