none
Retornar valores con input RRS feed

  • Pregunta

  • en una aplicacion Asp.Net MVC 4 desde el controlador hice el siguiente codigo:

    <AllowAnonymous()> _

    Public Function ListCli(byval search as string) as ActionResult

    if String.isNullorEmpty(search) then

    ...carga en un combo la lista de los clientes

    sino

    ...de acuerdo al cliente seleccionado, redirige a otra vista para desplegar datos de ese cliente

    End Function

    Y en la vista:

    @Using (Html.BeginForm())

    @p<> @Html.DropDownList("LL","All")

    <input type="submit" value="Buscar" /></p>

    en Using

    Ahora todo funciona bien, carga el dropDownList con los clientes, pero no me devuelve el item seleccionado en el combo.

    No entiendo cual es la accion que deberia realizer el "input" que al seleccionarlo retorne el valor.

    Tambien lo he probado con un TextBox y tampoco devuelve el valor.

    Del ejemplo que he estado utilizando (peliculas de Movie) no hay nada diferente, asi que no se que donde esta mi error.

    domingo, 18 de agosto de 2013 13:20

Respuestas

  • hola

    pero donde defines el action marcado como [HttpPost] ?

    porque en el subimit no se va a llamar a ListCli poque ese es para GET

    deberias tener

    Public Function ListCli() as ActionResult
    
       ViewData["search"] = New SelectList(custList.ToList(), "propDisplay", "PropValue")
        Return View()
    
    End Function
    
    [HttpPost]
    Public Function ListCli(byval search as string) as ActionResult
    
     'aqui codigo
    
    End Function


    @Html.DropDownList("search","All")

    de alguna forma pasar los datos que carguen la lista, y le asigne un nombre que debe councidir con el parametro del action marcado como post

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta eduepa domingo, 18 de agosto de 2013 20:58
    domingo, 18 de agosto de 2013 14:01
  • Ahora si entendi el concepto y asi funciona bien:

    Public Function ListCli(byval lista as string) as ActionResult

    if string.isnullorEmtpy(lista) then

    ...despliega la vista con el combo cargado: ViewData("lista") = New SelectList(li, "CliId", "CliNom", 0)

    else

    ...me devuelve el valor del id seleccionado en DropDownList y quiero redirigirlo a una nueva vista donde despliega todos los datos de ese cliente asi:

    Return RedirectToAction("DetCli", "Account")

    End Function

    Ahora como le puedo enviar a "DetCli" el valor de "lista" que contiene el id seleccionado ?

    o salvo que tenga otra forma de hacerlo...

    • Marcado como respuesta eduepa domingo, 18 de agosto de 2013 20:58
    domingo, 18 de agosto de 2013 16:00
  • Ahora como le puedo enviar a "DetCli" el valor de "lista" que contiene el id seleccionado ?

    Public Class AccountController
    
    	Public Function DetCli(lista As String) As ActionResult
    
    		Return View()
    
    	End Function
    
    End Class

    en el controlador creas el action que recibe el valor en su parametro

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta eduepa domingo, 18 de agosto de 2013 20:58
    domingo, 18 de agosto de 2013 16:18
  • Si Leandro eso ya lo hice, pero yo lo llamo desde la Function ListCli() de la siguiente manera:

    Return RedirectToAction("DetCli", "Account")

    y lo hice tal cual tu ejemplo

    Public Class AccountController

     
    Public Function DetCli(lista As String) As ActionResult

    Return View()

    End Function

    End Class

    pero lista = nothing por eso pienso deberia pasarla de alguna manera el valor

    • Marcado como respuesta eduepa domingo, 18 de agosto de 2013 20:58
    domingo, 18 de agosto de 2013 16:23
  • Buenas edupa,

    Debes devolver la lista que quieres llenar en tu View. Sería algo así,

    @using (Html.BeginForm())
    {
        @Html.DropDownListFor(
            x => x.PropiedadSeleccionLista, 
            new SelectList(Model.ValoresLista, "Value", "Text"),
            "Selecciona..."
        )
        <input type="submit" value="OK" />
    }

    Debes llenar y trabajar tu View con el @Model.

    Saludos,


    Francesc Jaumot Peña MSP - MCPD www.francescjaumot.net www.geeks.ms/blogs/fjaumot Twitter: @fjaumot

    • Marcado como respuesta eduepa domingo, 18 de agosto de 2013 20:58
    domingo, 18 de agosto de 2013 17:09
  • Ahora si que me marie: yo utilize un DropDownList y tu un DroDownListFor.

    Se me ocurrió en lugar de usar un input hacerlo asi:

    @Html.DropDownList("lista","All")

    @Html.ActionLink("Detalles", "DetCli", New with {.id = ???})

    pero donde puse los signos de interrogacion, no sabría como cargar la selección del DropDwonList

    • Marcado como respuesta eduepa domingo, 18 de agosto de 2013 20:58
    domingo, 18 de agosto de 2013 17:28
  • para que el RedirectToAction si este lo hace directamente el

    @Using (Html.BeginForm())

    define alli

    @Using (Html.BeginForm("DetCli", "Account", FormMethod.Post))

    con eso ya tienes al redireccion directa al realizar el submit

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta eduepa domingo, 18 de agosto de 2013 20:58
    domingo, 18 de agosto de 2013 19:12
  • no es necesario definir ningun id si es que no lo tienes

    ya que tu estas usando la seleccion del DropDownList, no necesitas ningun id en el actionlink

    solo define

    Public Function DetCli(lista As String) As ActionResult

    en el controlador,es importante quelo marado en negrita coincida

    @Html.DropDownList("lista","All")

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta eduepa domingo, 18 de agosto de 2013 20:59
    domingo, 18 de agosto de 2013 19:14

Todas las respuestas

  • Buenas eduepa,

    El nombre del control input debe ser el mismo que el del valor del VB.NET, es decir canviar search por el nombre del Input.

    Si no te funciona me dices,

    Gracias!


    Francesc Jaumot Peña MSP - MCPD www.francescjaumot.net www.geeks.ms/blogs/fjaumot Twitter: @fjaumot

    • Marcado como respuesta eduepa domingo, 18 de agosto de 2013 20:57
    • Desmarcado como respuesta eduepa domingo, 18 de agosto de 2013 21:32
    domingo, 18 de agosto de 2013 13:32
  • hola

    pero donde defines el action marcado como [HttpPost] ?

    porque en el subimit no se va a llamar a ListCli poque ese es para GET

    deberias tener

    Public Function ListCli() as ActionResult
    
       ViewData["search"] = New SelectList(custList.ToList(), "propDisplay", "PropValue")
        Return View()
    
    End Function
    
    [HttpPost]
    Public Function ListCli(byval search as string) as ActionResult
    
     'aqui codigo
    
    End Function


    @Html.DropDownList("search","All")

    de alguna forma pasar los datos que carguen la lista, y le asigne un nombre que debe councidir con el parametro del action marcado como post

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta eduepa domingo, 18 de agosto de 2013 20:58
    domingo, 18 de agosto de 2013 14:01
  • Ahora si entendi el concepto y asi funciona bien:

    Public Function ListCli(byval lista as string) as ActionResult

    if string.isnullorEmtpy(lista) then

    ...despliega la vista con el combo cargado: ViewData("lista") = New SelectList(li, "CliId", "CliNom", 0)

    else

    ...me devuelve el valor del id seleccionado en DropDownList y quiero redirigirlo a una nueva vista donde despliega todos los datos de ese cliente asi:

    Return RedirectToAction("DetCli", "Account")

    End Function

    Ahora como le puedo enviar a "DetCli" el valor de "lista" que contiene el id seleccionado ?

    o salvo que tenga otra forma de hacerlo...

    • Marcado como respuesta eduepa domingo, 18 de agosto de 2013 20:58
    domingo, 18 de agosto de 2013 16:00
  • Ahora como le puedo enviar a "DetCli" el valor de "lista" que contiene el id seleccionado ?

    Public Class AccountController
    
    	Public Function DetCli(lista As String) As ActionResult
    
    		Return View()
    
    	End Function
    
    End Class

    en el controlador creas el action que recibe el valor en su parametro

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta eduepa domingo, 18 de agosto de 2013 20:58
    domingo, 18 de agosto de 2013 16:18
  • Si Leandro eso ya lo hice, pero yo lo llamo desde la Function ListCli() de la siguiente manera:

    Return RedirectToAction("DetCli", "Account")

    y lo hice tal cual tu ejemplo

    Public Class AccountController

     
    Public Function DetCli(lista As String) As ActionResult

    Return View()

    End Function

    End Class

    pero lista = nothing por eso pienso deberia pasarla de alguna manera el valor

    • Marcado como respuesta eduepa domingo, 18 de agosto de 2013 20:58
    domingo, 18 de agosto de 2013 16:23
  • Buenas edupa,

    Debes devolver la lista que quieres llenar en tu View. Sería algo así,

    @using (Html.BeginForm())
    {
        @Html.DropDownListFor(
            x => x.PropiedadSeleccionLista, 
            new SelectList(Model.ValoresLista, "Value", "Text"),
            "Selecciona..."
        )
        <input type="submit" value="OK" />
    }

    Debes llenar y trabajar tu View con el @Model.

    Saludos,


    Francesc Jaumot Peña MSP - MCPD www.francescjaumot.net www.geeks.ms/blogs/fjaumot Twitter: @fjaumot

    • Marcado como respuesta eduepa domingo, 18 de agosto de 2013 20:58
    domingo, 18 de agosto de 2013 17:09
  • Ahora si que me marie: yo utilize un DropDownList y tu un DroDownListFor.

    Se me ocurrió en lugar de usar un input hacerlo asi:

    @Html.DropDownList("lista","All")

    @Html.ActionLink("Detalles", "DetCli", New with {.id = ???})

    pero donde puse los signos de interrogacion, no sabría como cargar la selección del DropDwonList

    • Marcado como respuesta eduepa domingo, 18 de agosto de 2013 20:58
    domingo, 18 de agosto de 2013 17:28
  • para que el RedirectToAction si este lo hace directamente el

    @Using (Html.BeginForm())

    define alli

    @Using (Html.BeginForm("DetCli", "Account", FormMethod.Post))

    con eso ya tienes al redireccion directa al realizar el submit

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta eduepa domingo, 18 de agosto de 2013 20:58
    domingo, 18 de agosto de 2013 19:12
  • no es necesario definir ningun id si es que no lo tienes

    ya que tu estas usando la seleccion del DropDownList, no necesitas ningun id en el actionlink

    solo define

    Public Function DetCli(lista As String) As ActionResult

    en el controlador,es importante quelo marado en negrita coincida

    @Html.DropDownList("lista","All")

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta eduepa domingo, 18 de agosto de 2013 20:59
    domingo, 18 de agosto de 2013 19:14
  • Buenas eduepa,

    Precisamente, el DropDownListFor es el que te permite un enlace cómodo con el Modelo de tu vista.

    Con eso, te debe funcionar todo perfecto. Llegar el ID a tu View, obtener los datos mediante jQuery y llenar el desplegable.

    Si algún concepto no te quedo claro, no dudes en comentarlo :)

    Saludos!!


    Francesc Jaumot Peña MSP - MCPD www.francescjaumot.net www.geeks.ms/blogs/fjaumot Twitter: @fjaumot

    • Marcado como respuesta eduepa domingo, 18 de agosto de 2013 20:59
    • Desmarcado como respuesta eduepa domingo, 18 de agosto de 2013 21:31
    domingo, 18 de agosto de 2013 19:35
  • Hice la redirección mediante @Using y funcionó perfecto. No lo probé pero el uso del DropDownListFor, pienso es una Buena opción también.

    Realmente no sabia que podía redirigir desde el Using. Perdón pero soy Nuevo en este tipo de codigo y se notan mis limitaciones. No obstante ello, el uso de Asp.Net y MVC lo veo realmente espectacular.

    Ahora, para otra aplicación necesito crear lo siguiente: todo con Asp.Net MVC 4

        1) desplegar una lista con diferentes opciones a seleccionar por el usuario:

              tipo 1      $ 5.-         [cantidad a ingresar]          resultado de $ 5.- x cantidad

              tipo 2       $ 3.-        [cantidad a ingresar]          resultado de $ 3.- x cantidad

              ....

              tipo 10    $ 2.-         [cantidad a ingresar]          resultado de $ 2.- x cantidad

                                                                          total $ suma de la seleccion anterior

    Costo anterior $ [...]

    Compras $ [...]

    Consumo $ [...]

    Resultado final del Nuevo costo $ ...

    Todo lo que está entre corchetes, sería a completer por el usuario. Las dudas serían las siguientes:

    1) para la lista, hacerlo mediante varios checkbox para que el usuario pueda seleccionar ?

    2) como podria una vez que seleccione, vaya realizando los calculos y acumulando el total ?

    3) las operaciones de calculo, donde tendria que realizarlas ?

    Para ello pensaba crear un modelo y en base a ello crear la vista. No se si me pueden sugerir algo o donde leer algun ejemplo al respecto.

    domingo, 18 de agosto de 2013 20:57
  • Para aclarar conceptos:

    en la vista del Login en esta línea: @Using Html.BeginForm(New With { .ReturnUrl = ViewData("ReturnUrl") })

    que está retornando ?

    domingo, 18 de agosto de 2013 21:32
  • @Using Html.BeginForm(New With { .ReturnUrl = ViewData("ReturnUrl") }) que está retornando ?

    esta tomando la url a la cual tiene que redireccionar despues de autenticar

    o sea si qusiste ingresar a la pagina de clientes y te redirecciono al login, depsues de autenticar te va a llevar directo a la pagina de cliente en lugar de ir a la pagina por defecto (por lo general es un action Index) que defines en el web.config

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    domingo, 18 de agosto de 2013 22:23
  • En la function Get del controlador existe esto que no sabia para que:

    ViewData("returnUrl") = returnUrl

    y ese mismo parametro (returnUrl) lo recibe en la function Post la cual nunca la utilizé.

    Ahora en esta última function, una vez autenticado el usuario hacia lo siguiente:

    RedirectToAction("Menu", "Home") sustituyendo lo que trae por defecto: "RediretToLocal(returnUrl)" pues a la página que deseo se diriga sea "Menu".

    Entonces, donde tendría que asignar esta página donde quiero dirigir una vez autenticado el Usuario ?

    domingo, 18 de agosto de 2013 22:45
  • En otra pantalla tengo 3 opciones de busqueda, por compania, nombre o categoria. Para saber por cual desea buscar, agregue la siguiente linea de codigo a continuación de cada DropDownList :

    @Html.ActionLink("Buscar", "BusCom")

    @Html.ActionLink("Buscar", "BusNom")

    @Html.ActionLink("Buscar", "BusCat")

    Ahora como le puedo enviar a cada function del controlador, lo seleccionado en el combo respectivo ?

    lunes, 19 de agosto de 2013 0:01