none
Problema con selección de items de un ListBox en ASP.NET RRS feed

  • Pregunta

  • Buenas Tardes Amigos.

    Llevo varios días implementando un proyecto en ASP.NET MVC4 aspx y en algún momento necesité tener 2 ListBoxes para pasar datos de uno a otro, lo hice guiándome por el ejemplo de esta URL (http://www.codeproject.com/Articles/136730/ASP-NET-MVC-Basics-Working-with-ListBoxes) y me ha funcionado muy bien la parte de la transferencia de uno a otro, pero después de hacer esto he programado un botón que al pincharlo debe hacer una inserción de lo que hay en el 2do ListBox en mi Base de datos y no obtengo resultado alguno.

    Estuve depurando el código a ver cual era el problema y veo que el funcionamiento del ejemplo es con listas y entre ellas hay una que es la que va almacenando lo que se pasó al 2do ListBox, y luego al pinchar el botón de inserción esa lista esta vacía, osea no tengo manera de poder insertar lo que esta en el 2do ListBox y en la vista si sigue lleno.

    Les adjunto mi código a ver que pudiese yo estar haciendo mal?, tengo la impresión de que mi pagina esta cargando  nuevamente todo en blanco en memoria cada vez que hago el pase al 2do ListBox.

    //Vista

    //Código

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using paginatesis.Models;
    
    namespace paginatesis.Controllers
    {
        public class MiembroConsejoController : Controller
        {        
            // GET: /MiembroConsejo/
    
            miembroconsejo mico = new miembroconsejo();
    
            public ActionResult Index()
            {
                if (HttpContext.Session["noCargo"] != null)
                { 
                if (HttpContext.Session["noCargo"].ToString() == "Secretaria")
                {
                    LinkedList<miembroconsejo> list = new LinkedList<miembroconsejo>();
                    list = mico.Listar();
                    ViewData["lista"] = list;
                }
                else
                    return RedirectToAction("Index", "Upload");
                }
                else
                    return RedirectToAction("Create", "Login");
    
                return View();            
            }       
    
            public ActionResult Index3()
            {
                miembroconsejo model = new miembroconsejo { AvailableProducts = mico.TodosMiembros, RequestedProducts = new List<Miemb>() };
    
                Dictionary<int, string> listIdCons = mico.CargarConsejos();
                List<SelectListItem> items = new List<SelectListItem>();
    
                foreach (KeyValuePair<int, string> x in listIdCons)
                    items.Add(new SelectListItem() { Value = x.Key.ToString(), Text = x.Value });
    
                ViewBag.Cons = items;
    
                return View(model);
            }
    
    
            [HttpPost]
            public ActionResult Index3(miembroconsejo model, string add, string remove, string send)
            {
    
                Dictionary<int, string> listIdCons = mico.CargarConsejos();
                List<SelectListItem> items = new List<SelectListItem>();
    
                foreach (KeyValuePair<int, string> x in listIdCons)
                    items.Add(new SelectListItem() { Value = x.Key.ToString(), Text = x.Value });
    
                ViewBag.Cons = items;
    
                if (!string.IsNullOrEmpty(Request["id_consejo"]))
                {
    
                    mico.id_consejo = int.Parse(Request["id_consejo"]);
    
                    if (mico.RequestedProducts != null)
                        foreach (var item in mico.RequestedProducts)
                        {
                            mico.id_miembro = item.Id;
                            mico.Insertar();
                        }
                }
    
                //Need to clear model state or it will interfere with the updated model
                ModelState.Clear();
                RestoreSavedState(model);
                if (!string.IsNullOrEmpty(add))
                    AddProducts(model);
                else if (!string.IsNullOrEmpty(remove))
                    RemoveProducts(model);
                else if (!string.IsNullOrEmpty(send))
                {
                    Validate(model);
                    if (ModelState.IsValid)
                        return RedirectToAction("Done");
    
                }
                SaveState(model);
                return View(model);
            }
    
     [HttpGet]
            public ActionResult Eliminar(string id_miembro,int id_consejo)
            {
                miembroconsejo mi = mico.Detalles(id_consejo);
                return View(mi);
            }
            [HttpPost]
            public ActionResult Eliminar(int id_miembro,int id_consejo, FormCollection s)
            {
                if (string.IsNullOrEmpty(Request["Eliminar"]))
                {
                    mico.Eliminar(id_miembro,id_consejo);
    
                    return RedirectToAction("Index", "MiembroConsejo");
                }
                return View();
            } 
            
             public ViewResult Done()
            {
                return View();
            }
    
             #region SupportFuncs
             private void Validate(miembroconsejo model)
             {
                 /*  if (model.RequestedTotal > 400m)
                       ModelState.AddModelError("", "Total must be 400 or less");
                   if (model.RequestedProducts.Count > 3)
                       ModelState.AddModelError("", "Maximum of 3 selections allowed");
                   if (string.IsNullOrEmpty(model.SavedRequested))
                       ModelState.AddModelError("", "You haven't selected any presents!");*/
             }
    
            void SaveState(miembroconsejo model)
            {
                //create comma delimited list of product ids
                model.SavedRequested = string.Join(",", model.RequestedProducts.Select(p => p.Id.ToString()).ToArray());
    
                //Available products = All - Requested
                model.AvailableProducts = mico.TodosMiembros.Except(model.RequestedProducts).ToList();
            }
    
            void RemoveProducts(miembroconsejo model)
            {
                if (model.RequestedSelected != null)
                {
                    model.RequestedProducts.RemoveAll(p => model.RequestedSelected.Contains(p.Id));
                    model.RequestedSelected = null;
                }
            }
    
            void AddProducts(miembroconsejo model)
            {
                if (model.AvailableSelected != null)
                {
                    var prods = mico.TodosMiembros.Where(p => model.AvailableSelected.Contains(p.Id));
                    model.RequestedProducts.AddRange(prods);
                    model.AvailableSelected = null;
                }
            }
    
            void RestoreSavedState(miembroconsejo model)
            {
                model.RequestedProducts = new List<Miemb>();
    
                //get the previously stored items
                if (!string.IsNullOrEmpty(model.SavedRequested))
                {
                    string[] prodids = model.SavedRequested.Split(',');
                    var prods = mico.TodosMiembros.Where(p => prodids.Contains(p.Id.ToString()));
                    model.RequestedProducts.AddRange(prods);
                }
            }
            #endregion   
                   
        }
    }

    saludos y gracias


    Alex

    jueves, 26 de mayo de 2016 22:15

Respuestas

  • hola

    recuerda que estas en un ambiente web, no hay estado en el servidor por lo que entre cada request pierdes los datos

    deberias conservar la instancia de "mico" en un objeto Session para poder ir agregando o removiendo items

    asi como lo realizas se pierde cuando termina el request

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    sábado, 28 de mayo de 2016 2:08