none
enviar parámetros a un control desde un link en MVC 2 con VS 2008 RRS feed

  • Pregunta

  • Hola!!  soy nuevo en el foro y mi problema es el siguiente:

    Tengo un control en el cual llamo a un método que me devuelve un listado de fechas (mes y año), ahora, este listado lo muestro en la vista como link ejemplo :

    enero 2013
    diciembre 2012
    noviembre 2012

    Lo que necesito es enviar esos parametros (mes y año) a otro control ya que los necesito para el metodo que me devuelve el detalle de esas fechas, como puedo hacerlo?

    Este es mi código:

    Control.cs

    public class MenuBoletasController : SiteController
        {
            public ActionResult Menu()
            {
                XXXWebWCFHost.IntranetClient Servicio = new XXXWebWCFHost.IntranetClient();
    
                var vMenu = Servicio.SelectPeriodos("01", "000000071");
    
                List<MenuBoletaEntity> MenuBoleta = new List<MenuBoletaEntity>();
                foreach (var item in vMenu)
                {
                    MenuBoleta.Add(UtilHost.TranslateMenuBoletaToMenuBoletaEntity(item));
                }
    
                ViewData["MenuBoleta"] = MenuBoleta;
    
                return View();
            }
            
    
        }

    y el código de la vista es :

    <div>
    <%
        foreach (var Periodos in (List<MenuBoletaEntity>)ViewData["MenuBoleta"])
        {
            Response.Write("<tr>");
            Response.Write("<td>" + "<a href='../Boletas/Boleta?" + Periodos.ano_periodo +  Periodos.codigo_periodo + "'>" + Periodos.descripcion_mes + " " + Periodos.ano_periodo + "</a>" + "</td>");
            
            Response.Write("</tr>");
        }
    %>
    </div>  

    los valores del mes y año necesito enviarlos al control a la cual le hago el href="Boletas/Boleta". El codigo de ese control es:

    public ActionResult Boleta()
            {
                XXXWebWCFHost.IntranetClient Servicio = new XXXWebWCFHost.IntranetClient();
    
    //en vez de "12" y "2012" debo enviarle los parametros que estan en cada fecha del link
    
                var vIngresos = Servicio.SelectBoletasEmpleados( "12", "2012",   "000000071");
                
    
                List<BoletaEntity> Ingresos = new List<BoletaEntity>();
                foreach (var item in vIngresos)
                {
                    Ingresos.Add(UtilHost.TranslateBoletaToBoletaEntity(item));
                }
    
               
    
                ViewData["Ingresos"] = Ingresos;
                
    
                return View();
    
            }

    Espero su ayuda

    viernes, 1 de marzo de 2013 21:24

Respuestas

  • En mi opinión, lo más elegante sería pasar los parámetros en la URL, y luego extraerlos como parámetros del método de acción.

    Es decir, en donde construyes el href en la vista, constrúyelo así:

    "<a href='../Boletas/Boleta/" + Periodos.ano_periodo + "/" + Periodos.codigo_periodo ...

    Y luego en el método de acción de Boleta recíbelo así:

    public ActionResult Boleta(int ano_periodo, int codigo_periodo)

    Y para que funcione, en el mapa de rutas en el global.asax añade una ruta que admita los dos parámetros.

    sábado, 2 de marzo de 2013 8:48

Todas las respuestas

  • En mi opinión, lo más elegante sería pasar los parámetros en la URL, y luego extraerlos como parámetros del método de acción.

    Es decir, en donde construyes el href en la vista, constrúyelo así:

    "<a href='../Boletas/Boleta/" + Periodos.ano_periodo + "/" + Periodos.codigo_periodo ...

    Y luego en el método de acción de Boleta recíbelo así:

    public ActionResult Boleta(int ano_periodo, int codigo_periodo)

    Y para que funcione, en el mapa de rutas en el global.asax añade una ruta que admita los dos parámetros.

    sábado, 2 de marzo de 2013 8:48
  • Muy buenas

    Fr4nj0, has probado con algo así: 

    <%= Html.ActionLink("Nuevo Proyecto", "Create", "Projects", new {id= Model.CompanyId}, null) %>

    Saludos


    Juan Gómez

    domingo, 3 de marzo de 2013 1:24
  • Hola Alberto Población,  claro eso es lo que también había pensado, pero no se como hacer para capturar los parámetros en el control que quiero. 

    Hasta ahora cuando hago click en las fechas, en la URL ya me muestra los parametros:

    http://localhost:1320/Boletas/Boleta?/2013/01

    Ahora, como hago para agregar la ruta en el global.asax? 

    Gracias por la ayuda!


    lunes, 4 de marzo de 2013 14:50
  • a) Quita la interrogación de la URL.

    Es decir, tiene que quedar así: http://localhost:1320/Boletas/Boleta/2013/01

    b) En el global.asax, busca la línea que dice esto:

    routes.MapRoute("Default", "{controller}/{action}/{id}", ...

    y ANTES de ella, añade esto:

    routes.MapRoute("MiRuta", "Boletas/Boleta/{ano_periodo}/{codigo_periodo}",

       new { controller = "Boletas", action = "Boleta" });

    lunes, 4 de marzo de 2013 15:55
  • Funciono!!!!! muchas gracias!! =) ... pero, ahora me sucede un problema, la vista que me muestra el detalle de las fechas, le he agregado un link para  regresar al menu de fechas.

    <a href="../MenuBoletas/Menu">Regresar</a>

    pero cuando quiero regresar a esa pagina no lo hace, y vuelve a cargar la pagina Boletas/Boleta y los parámetros toman los sgtes valores

    ano_periodo = MenuBoletas 

    codigo_periodo = Menu

    Que puedo estar haciendo mal?

    espero tus comentarios =)

    lunes, 4 de marzo de 2013 20:54
  • El problema es que estás poniendo una dirección relativa "../menuBoletas/Menu". Pero como ahora tu URL tiene un nivel más, la dirección relativa necesita subir un nivel más para volver al menú: "../../menuBoletas/Menu". En lugar de codificar a piñón fijo la URL, te sugiero que dentro de la vista pongas un Html.ActionLink, para que la propia infraestructura de MVC te calcule la ruta, y así no tienes que preocuparte si en algún momento en el futuro cambias de nuevo la URL de la página.

    lunes, 4 de marzo de 2013 21:12
  • Hola Alberto, otra cosa que esta sucediendo en mi aplicación, es que la URL con "/" me produce errores javascript y hace que la página pierda todos los estilos, me muestra en blanco, pero cuando cambio el "/" por el "?" no altera en nada, solo que no coge los parametros.

    Habrá otra forma de coger los parametros y que no me produzca errores javascrip? 

    Gracias.

    martes, 5 de marzo de 2013 13:56
  • Hoola!!! ya solucione mi problema!...gracias por tu ayuda!! =)
    jueves, 7 de marzo de 2013 13:08