none
Enviar label como parametro. RRS feed

  • Pregunta

  • Buenas, estoy creando una aplicación web con ASP.NET MVC y razor como front-end. 

    El problema que tengo es que dependiendo de como acceda a una página, tengo un combo de DNIs o un label del cliente que previamente he buscado. Cuando selecciono un DNI del combo, funciona, el problema está en cuando el valor del DNI lo muestro como label, cuando llega al controlador no tiene ese parametro. 

                        @if (ViewBag.dniCliente == null)
                        {
                            @Html.DropDownList("idCliente", null, htmlAttributes: new { @class = "form-control" })
                            @Html.ValidationMessageFor(model => model.idCliente, "", new { @class = "text-danger" })
                        }
                        else
                        {
                            <label >@ViewBag.dniCliente</label>
                        }

    Gracias. 

    domingo, 14 de abril de 2019 10:31

Todas las respuestas

  • el problema está en cuando el valor del DNI lo muestro como label, cuando llega al controlador no tiene ese parametro.  

    Es una característica del HTML. Cuando en un <Form> de html hay controles <input> y <select>, el valor seleccionado en estos controles se transmite al servidor. Pero el resto de los contenidos que haya en el <form> no se envía. Por lo tanto, no existe nada que puedas hacer en tu controlador para recuperar esos valores. Si no se envían al servidor, no es posible recuperarlos desde el servidor.

    Conclusión: Si realmente necesitas enviar ese valor, tienes que ubicarlo en otro tipo de contenedor que no sea un Label. Podrías agregar otra copia del valor dentro de un campo <input type="hidden">, que no se verá en pantalla pero sí que se envía al servidor.

    Pero en este caso concreto, y dado que el valor del label lo sacas del ViewBag, quiere decir que el valor ya era conocido de antemano en el lado servidor (puesto que de lo contrario no habrías podido meterlo en el ViewBag). Por lo tanto, se podría omitir el viaje de ida y vuelta al navegador, y en su lugar mantener el valor que ya era conocido en el servidor dentro del servidor. Una forma sencilla de hacer esto es simplemente meterlo en el Session.

    domingo, 14 de abril de 2019 12:27
  • hola

    @if (ViewBag.dniCliente == null) { @Html.DropDownList("idCliente", null, htmlAttributes: new { @class = "form-control" }) @Html.ValidationMessageFor(model => model.idCliente, "", new { @class = "text-danger" }) } else { <label >@ViewBag.dniCliente</label>

    <hidden id="idCliente" value="@ViewBag.dniCliente" /> }

    el hidden si interviene en el post al servidor viajando el datos

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    domingo, 14 de abril de 2019 14:11