none
Pasar objeto tipado de un controlador a otro RRS feed

  • Pregunta

  • Hola, les escribo porque necesito su ayuda en un problema que tengo.
    Lo primero que tengo que mencionar es el proyecto, es una página web hecha en MVC en lenguaje C#.
    Ahora paso al problema.... tengo en un controlador "Connection" un método Search que devuelve una List<Connections>, pero el tema es que necesito devolver eso a otra action en otro controlador, el controlador "Home" y no se como hacer, téngo este código pero no me funciona.

    [AcceptVerbs(HttpVerbs.Post)]
            public ActionResult Search(string txtSearch, bool? gender, string genderText, bool? country, int? countryId, bool? city, string cityText, bool? brand, string brandText, string catalogToSearch)
            {
                List<Connection> connections = new List<Connection>();
                userModel = new UserModel();
                User user = userModel.GetUserByUsername(User.Identity.Name);
                SearchFilter filter = new SearchFilter();
                filter.Brand = brand.HasValue ? brand.Value : false;
                filter.BrandText = brandText;
                filter.City = city.HasValue ? city.Value : false;
                filter.CityText = cityText;
                filter.Country = country.HasValue ? country.Value : false;
                filter.idCountry = countryId.HasValue ? countryId.Value : -1;
                filter.Gender = gender.HasValue ? gender.Value : false;
                filter.GenderText = genderText;
                connectionModel = new ConnectionModel();
                txtSearch = string.IsNullOrEmpty(txtSearch) ? String.Empty : txtSearch.Replace(' ', '|');
                connections = connectionModel.Search(txtSearch, user.Id, filter, int.Parse(catalogToSearch));
    
                return RedirectToAction("Home/Filter", connections);
            }
    Ese era el codigo de Search en el controlador "ConnectionController", ahora va la action en el controlador HomeController:

    public ActionResult Filter(List<Connection> connections)
            {
                return View("Home", connections);
            }
    pero cada vez que quiero hacerlo, la lista List<Connection> connections que recibo en Filter, está sin nada (count = 0), ya he probado miles de cosas y no se como hacer para pasar ese objeto, espero me puedan ayudar.... dejo también lo que tengo en el global.asax

    routes.MapRoute(
                    "Filter",                                              
                    "Home/Filter",                           
                    new { controller = "Home", action = "Filter", connections = new List<Connection>() }  
                );
    Espero me puedan ayudar, gracias de antemano!
    jueves, 29 de octubre de 2009 18:35

Respuestas

  • hola

    En este link, creo esta la respuesta a tu pregunta:

    como veras se hace uso de un atributo "PassParametersDuringRedirect" en el controlador.

    este es parte del MVCContrib, al cual te recomiendo le des una mirada ya que extiende algunas punto importantes de mvc y seguro te seran de utilidad





    por ahi este no es tu caso pero si puede servir de ejemplo link
    veras que el RedirectToAction hace uso de generics y puedes especificar la clase del controlador donde quieres redireccionar

    veras como hace 
    return RedirectToAction<OrdersController>(c => c.Show(item.Order));

    o sea redirecciona al controlador de Ordenes pasando en la expresion lambda las ordenes
    esto es lo que agrega MVCContrib



    Solo una ultima aclaración en tu código porque defines la linea
    List<Connection> connections = new List<Connection>();

    si luego la cargas del resultado de una consulta en 
    connections = connectionModel.Search(txtSearch, user.Id, filter, int.Parse(catalogToSearch));

    no seria conveniente si la defines y cargas en la misma linea, algo asi:
    List<Connection> connections = connectionModel.Search(txtSearch, user.Id, filter, int.Parse(catalogToSearch));


    saludos

    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    domingo, 1 de noviembre de 2009 23:05

Todas las respuestas

  • Hola Gonzalo,

    es una propuesta tonta y seguramente no sea la solución, pero has probado a pasar por referencia la lista de conexiones?

    return
     RedirectToAction("Home/Filter"
    , ref
     connections);


    public
     ActionResult Filter(ref
     List<Connection> connections)



    En caso de que la respuesta te sirva, porfavor, márcala como válida

    Muchas gracias y suerte!


    Javier Jiménez Roda


    MCP (Microsoft Certified Professional)
    MCTS (Microsoft Certified Technology Specialist)
    MCPD (Microsoft Certified Professional Developer)
    Blog: http://jimenezroda.wordpress.com

    viernes, 30 de octubre de 2009 8:46
  • hola

    En este link, creo esta la respuesta a tu pregunta:

    como veras se hace uso de un atributo "PassParametersDuringRedirect" en el controlador.

    este es parte del MVCContrib, al cual te recomiendo le des una mirada ya que extiende algunas punto importantes de mvc y seguro te seran de utilidad





    por ahi este no es tu caso pero si puede servir de ejemplo link
    veras que el RedirectToAction hace uso de generics y puedes especificar la clase del controlador donde quieres redireccionar

    veras como hace 
    return RedirectToAction<OrdersController>(c => c.Show(item.Order));

    o sea redirecciona al controlador de Ordenes pasando en la expresion lambda las ordenes
    esto es lo que agrega MVCContrib



    Solo una ultima aclaración en tu código porque defines la linea
    List<Connection> connections = new List<Connection>();

    si luego la cargas del resultado de una consulta en 
    connections = connectionModel.Search(txtSearch, user.Id, filter, int.Parse(catalogToSearch));

    no seria conveniente si la defines y cargas en la misma linea, algo asi:
    List<Connection> connections = connectionModel.Search(txtSearch, user.Id, filter, int.Parse(catalogToSearch));


    saludos

    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    domingo, 1 de noviembre de 2009 23:05
  • hola

    En este link, creo esta la respuesta a tu pregunta:

    como veras se hace uso de un atributo "PassParametersDuringRedirect" en el controlador.

    este es parte del MVCContrib , al cual te recomiendo le des una mirada ya que extiende algunas punto importantes de mvc y seguro te seran de utilidad





    por ahi este no es tu caso pero si puede servir de ejemplo link
    veras que el RedirectToAction hace uso de generics y puedes especificar la clase del controlador donde quieres redireccionar

    veras como hace 
    return RedirectToAction<OrdersController>(c => c.Show(item.Order));

    o sea redirecciona al controlador de Ordenes pasando en la expresion lambda las ordenes
    esto es lo que agrega MVCContrib



    Solo una ultima aclaración en tu código porque defines la linea
    List<Connection> connections = new List<Connection>();

    si luego la cargas del resultado de una consulta en 
    connections = connectionModel.Search(txtSearch, user.Id, filter, int.Parse(catalogToSearch));

    no seria conveniente si la defines y cargas en la misma linea, algo asi:
    List<Connection> connections = connectionModel.Search(txtSearch, user.Id, filter, int.Parse(catalogToSearch));


    saludos

    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    Leandro, muchas gracias por tu respuesta! no lo he probado pero seguramente es exactamente lo que necesito. Con respecto a tu pregunta, tienes razón, lo debería de haber hecho como tu mencionas (List<Connection> connections = connectionModel.Search(txtSearch, user.Id, filter, int.Parse(catalogToSearch));) cosa que cambiaré.

    Muchas gracias.
    lunes, 2 de noviembre de 2009 11:22