none
como mostrar el elemento seleccionado de un Enum en un dropdownlist RRS feed

  • Pregunta

  • Hola,

    Estoy trabajando con ASP.NET MVC 5...

    Tengo un tipo Horarios de la siguiente manera:

    public enum Horarios {

    [Description("08:00 a 08:30")]

    De_08h00_08h30,

    [Description("08:30 a 09:00")]

    De_08h30_09h00,

    [Description("09:00 a 09:30")]

    De_09h00_09h30,

    [Description("09:30 a 10:00")]

    De_09h30_10h00,

    [Description("10:00 a 10:30")]

    De_10h00_10h30,

    [Description("10:30 a 11:00")]

    De_10h30_11h00,

    [Description("11:00 a 11:30")]

    De_11h00_11h30,

    [Description("11:30 a 12:00")]

    De_11h30_12h00

    }

    En la vista en la que quiero editar los datos, necesito mostrar el valor en el dropdownlist que esta seleccionado antes de realizar esta edición.

    Pero no consigo hacerlo...

    Esto es lo que tengo por ahora:

    En el Controller (concretamente, en el [httpPost] de Editar :

    var list = Enum.GetValues(typeof(Horarios)).Cast<Horarios>().Select(v => v.ToString()).ToList(); ViewBag.miHorario = new SelectList(list, "miHorario");

    En el controller también tengo una variabe 'horarioSeleccionado' que tiene el valor que hay en la BBDD antes de realizar la edición... Pero no sé como puedo utilizar esta variable!!! :-( :-(

    En la vista Editar tengo esto:

    <div class="form-group">

         @Html.LabelFor(model => model.miHorario, htmlAttributes: new { @class = "control-label col-md-2" })

         <div class="col-md-10">

              @Html.DropDownList("miHorario", null, htmlAttributes: new { @class = "form-control" })                                                 @Html.ValidationMessageFor(model => model.miHorario, "", new { @class = "text-danger" })

         </div>

    </div>

    Como puedo tener en mi vista Editar el dropdownlist con todas las opciones de horarios, pero que me muestre de inicio la que está seleccionado en la BBDD y no la primera de la lista como me hace ahora???

    Gracias.

    Un saludo,

    fko

    sábado, 26 de diciembre de 2015 9:47

Todas las respuestas

  • Por un lado, para que se muestren las descripciones de los valores utiliza el atributo Display en lugar del atributo Description:

        public enum Horarios
        {
            [Display(Name = "08:00 a 08:30")]
            De_08h00_08h30,
            [Display(Name = "08:30 a 09:00")]
            De_08h30_09h00,
            [Display(Name = "09:00 a 09:30")]
            De_09h00_09h30,
            [Display(Name = "09:30 a 10:00")]
            De_09h30_10h00,
            [Display(Name = "10:00 a 10:30")]
            De_10h00_10h30,
            [Display(Name = "10:30 a 11:00")]
            De_10h30_11h00,
            [Display(Name = "11:00 a 11:30")]
            De_11h00_11h30,
            [Display(Name = "11:30 a 12:00")]
            De_11h30_12h00
        }
    

    Si la propiedad del modelo miHorario es de tipo Horarios no tienes más que utilizar el método de extensión EnumDropDownListFor en la vista:

    @Html.EnumDropDownListFor(m=> m.miHorario, new { @class = "form-control" })


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    sábado, 26 de diciembre de 2015 10:14
  • Muchas gracias por tu respuesta,

    Me ha funcionado! :-)

    Aunque ahora me ha surgido otro error...

    En mi controlador tengo un ActionResult llamado NuevoPedido:

    public ActionResult NuevoPedido(VistaPedido vistaPedido)

    {

    var vistaPedido = new VistaPedido();
    vistaPedido.Pedido = new Pedido();
            Session["vistaPedido"] = vistaPedido;

    var list2 = Enum.GetValues(typeof(Horarios)).Cast<Horarios>().Select(v => v.ToString()).ToList();
      
          ViewBag.HorarioEntrega = new SelectList(list2, "HorarioEntrega");
          return View(vistaPedido);

    }

    Y Este es su POST:

    [HttpPost]

    public ActionResult NuevoPedido(VistaPedido vistaPedido)

    {

    vistaPedido = Session["vistaPedido"] as VistaPedido;
        var horariosEntrega =Request["HorarioEntrega"];

    var pedido = new Pedido
                        {
                            ClienteParticularID = customerID,
                            FechaPedido = DateTime.Now,
                            FechaEntrega=fechaEntrega,
                            HorarioEntrega = horariosEntrega

                        };

    }

    Me da error en la creación del pedido: Concretamente en la asignación: HorarioEntrega = horariosEntrega

    El error es: "No se puede convertir implicitamente el tipo 'string' en 'MiContexto.Models.Horarios'

    Este es mi modelo de pedido:

    public class Pedido
        {
            [Key]
            public int PedidoID { get; set; }
            public DateTime FechaPedido { get; set; }
            public int ClienteID { get; set; }
            
            [DataType(DataType.DateTime)]
            [DisplayFormat(DataFormatString="{0:dd/MM/yyyy}",ApplyFormatInEditMode=true)]
            public string FechaEntrega { get; set; }
            public Horarios HorarioEntrega { get; set; }

            [JsonIgnore]
            public virtual Cliente Cliente { get; set; }
            [JsonIgnore]
            public virtual ICollection<DetallePedido> DetallesPedido { get; set; }

        }

    Si no me equivoco, es debido al Request, ya que me devuelve un string.

    Cómo puedo recuperar en el post de pedido lo que hay en la lista pero que sea en formato 'Horarios', para que después pueda asignarlo en la creación del pedido?

    Gracias.

    domingo, 27 de diciembre de 2015 11:06
  • Pero ¿para qué necesitas pasar la lista de valores de la enumeración? Con la solución que te ponía en el mensaje anterior no necesitas crear esa lista.

    En la acción GET entiendo que te sobra el parámetro del método, no lo utilizas para nada. De hecho me extraña que te compile ya que declaras una variable con el mismo nombre que el parámetro del método.

    public ActionResult NuevoPedido()
    {
      var vistaPedido = new VistaPedido();
      vistaPedido.Pedido = new Pedido();
      Session["vistaPedido"] = vistaPedido; 
      return View(vistaPedido); 
    }
    

    En el método POST recibes el parámetro vistaPedido pero lo primero que haces es sobrescribirlo con el contenido de la variable de sesión, con lo que pierdes cualquier información recibida desde el formulario.

    Haría falta tener más detalles sobre lo que tratas de hacer, pero entiendo que sería algo así:

    [HttpPost]
    public ActionResult NuevoPedido(VistaPedido vistaPedido)
    {
      pedidoSesion = Session["vistaPedido"] as VistaPedido;
      pedidoSesion.Pedido.ClienteParticularID = vistaPedido.PedidoClienteParticularID;
      pedidoSesion.Pedido.FechaPedido = DateTime.Now;
      pedidoSesion.Pedido.FechaEntrega = vistaPedido.FechaEntrega;
      pedidoSesion.Pedido.HorarioEntrega = vistaPedido.HorarioEntrega;
    }
    


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    domingo, 27 de diciembre de 2015 11:33
  • Este es mi controlador entero:

    using MiContexto.Models;
    using MiContexto.ViewModels;
    using System;
    using System.Collections.Generic;
    using System.Data.Entity;
    using System.Linq;
    using System.Net;
    using System.Web;
    using System.Web.Mvc;
    
    using System.ComponentModel.DataAnnotations;
    
    
    
    namespace MiContexto.Controllers
    {
        public class PedidosController : Controller
        {
            MiContextoContext db = new MiContextoContext();
            // GET: Pedidos
            public ActionResult NuevoPedido()
            {
                var vistaPedido = new VistaPedido();
                vistaPedido.Cliente = new Cliente();
                vistaPedido.Productoses = new List<PedidoProducto>();
                vistaPedido.Pedido = new Pedido();
                Session["vistaPedido"] = vistaPedido;
    
                var list = db.Clientes.ToList();
                list.Add(new Cliente { ClienteID = 0, Nombre = "[Elige un cliente...]" });
                list = list.OrderBy(c => c.NombreCompleto).ToList();
                ViewBag.ClienteID = new SelectList(list, "ClienteID", "NombreCompleto");
    
    
    
                var list2 = Enum.GetValues(typeof(Horarios)).Cast<Horarios>().Select(v => v.ToString()).ToList();
    
                ViewBag.HorarioEntrega = new SelectList(list2, "HorarioEntrega");
                return View(vistaPedido);
            }
    
            // POST:
            [HttpPost]
            public ActionResult NuevoPedido(VistaPedido vistaPedido)
            {
                vistaPedido = Session["vistaPedido"] as VistaPedido;
                var customerID = int.Parse(Request["ClienteID"]);
                var horariosEntrega =Request["HorarioEntrega"];
    
    
                //INICIO DEL CÓDIGO QUE HE COPIADO DE TU RESPUESTA
    
                var pedidoSesion = Session["vistaPedido"] as VistaPedido;
                pedidoSesion.Pedido.ClienteID = vistaPedido.Pedido.ClienteID;
                pedidoSesion.Pedido.FechaPedido = DateTime.Now;
                pedidoSesion.Pedido.FechaEntrega = vistaPedido.Pedido.FechaEntrega;
                pedidoSesion.Pedido.HorarioEntrega = vistaPedido.Pedido.HorarioEntrega;
    
                //FIN DEL CÓDIGO QUE HE COPIADO DE TU RESPUESTA
    
                //var fechaEntrega = DateTime.Parse(Request["FechaEntrega"]);
    
                var fechaEntrega = Request["FechaEntrega"];
                var list = db.Clientes.ToList();
                var list3 = Enum.GetValues(typeof(Horarios)).Cast<Horarios>().Select(v => v.ToString()).ToList();
    
                if (customerID == 0)
                {
                    //No seleccionó nada...Por tanto lo devolvemos a la vista
                    list.Add(new Cliente { ClienteID = 0, Nombre = "[Elige un cliente...]" });
                    list = list.OrderBy(c => c.NombreCompleto).ToList();
                    ViewBag.ClienteID = new SelectList(list, "ClienteID", "NombreCompleto");
                    ViewBag.Error = "Debes seleccionar un cliente";
    
                    list3 = Enum.GetValues(typeof(Horarios)).Cast<Horarios>().Select(v => v.ToString()).ToList();
                    ViewBag.HorarioEntrega = new SelectList(list3, "HorarioEntrega");
    
                    return View(vistaPedido);
                }
    
                var cliente = db.Clientes.Find(customerID);
                if (cliente == null)
                {
                    //El cliente ya no existe
                    list.Add(new Cliente { ClienteID = 0, Nombre = "[Elige un cliente...]" });
                    list = list.OrderBy(c => c.NombreCompleto).ToList();
                    ViewBag.ClienteID = new SelectList(list, "ClienteID", "NombreCompleto");
                    ViewBag.Error = "El cliente ya no existe";
    
                    list3 = Enum.GetValues(typeof(Horarios)).Cast<Horarios>().Select(v => v.ToString()).ToList();
                    ViewBag.HorarioEntrega = new SelectList(list3, "HorarioEntrega");
    
                    return View(vistaPedido);
                }
    
                var nombreCompleto="";
                var direccion="";
                var telefono="";
                var comercialID = 0;
                var comercial="";
                SiNo primeraVenta=SiNo.Sí;
    
    
                var datosCliente=(from c in db.Clientes
                             where c.ClienteID == customerID
                             select c);
    
                foreach (var itemCliente in datosCliente)
    
    
                {
                    nombreCompleto = itemCliente.NombreCompleto;
                    direccion=itemCliente.Direccion;
                    telefono = itemCliente.Telefono1;
                    comercialID = itemCliente.ComercialID;
    
                }
    
                var datosComercial = from NombreCompleto in db.Comercials
                                   select NombreCompleto;
    
                foreach (var itemComercial in datosComercial)
                {
                    if (comercialID==itemComercial.ComercialID)
                    {
                        comercial = itemComercial.NombreCompleto;
                    }
    
    
                }
    
                var esPrimeraVenta = (from c in db.Ventas
                                    where
                                        c.Cliente == nombreCompleto
                                    select c).Count();
                if (esPrimeraVenta>0)
                {
                    var actualizaCliente = (from c in db.Clientes
                                            where c.ClienteID == customerID
                                            select c).First();
    
                    try
                    {
                        if (actualizaCliente.PrimeraVenta==SiNo.Sí)
                        {
                            actualizaCliente.PrimeraVenta = SiNo.No;
                            db.SaveChanges();
                        }
                        primeraVenta = SiNo.No;
    
                    }
    
                    catch
                    {
    
                    }
    
                }
    
    
                if (vistaPedido.Productoses.Count == 0)
                {
                    //No ha seleccionado ningún producto
                    list.Add(new Cliente { ClienteID = 0, Nombre = "[Elige un cliente...]" });
                    list = list.OrderBy(c => c.NombreCompleto).ToList();
                    ViewBag.ClienteID = new SelectList(list, "ClienteID", "NombreCompleto");
                    ViewBag.Error = "Debe ingresar algún producto";
    
                    list3 = Enum.GetValues(typeof(Horarios)).Cast<Horarios>().Select(v => v.ToString()).ToList();
                    ViewBag.HorarioEntrega = new SelectList(list3, "HorarioEntrega");
                    return View(vistaPedido);
                }
    
                //Grabamos en la BBDD con manejo transaccional:
                int pedidoID = 0;
    
                using (var transaccion = db.Database.BeginTransaction())
                {
                    try 
                    {
                        var pedido = new Pedido
                        {
                            ClienteID = customerID,
                            FechaPedido = DateTime.Now,
                            FechaEntrega=fechaEntrega,
                            HorarioEntrega = pedidoSesion.Pedido.HorarioEntrega
                        };
    
                        db.Pedidos.Add(pedido);
                        db.SaveChanges();
    
                        pedidoID = db.Pedidos.ToList().Select(p => p.PedidoID).Max();
    
                        double valorTotal = 0;
                        double cien = 100;
                        double a=0;
                        foreach (var item in vistaPedido.Productoses)
                        {
    
                            var detallePedidoProducto = new DetallePedido
                            {
                              Descripcion=item.NombreProducto,
                              Precio=item.PrecioSinIva,
                              Cantidad=item.Cantidad,
                              ProductoID=item.ProductoID,
                              PedidoID=pedidoID,
                              Descuento=item.Descuento,
                              IvaProducto=item.Iva
                            };
    
                            var iva = item.Iva; 
                            a = (double)((double)item.PrecioSinIva * (double)item.Cantidad) + (double)((double)item.PrecioSinIva * (double)iva / cien * (double)item.Cantidad);
                            var desc = a * (double)detallePedidoProducto.Descuento / cien;
                            a = a - desc;
                            valorTotal = valorTotal + a;
                            db.DetallesPedido.Add(detallePedidoProducto);
    
                            //Decrementar stock del almacén
    
                            var almacen = (from c in db.Almacenes
                                                    where c.ProductoID == detallePedidoProducto.ProductoID
                                                    select c).First();
                            try
                            {
                                if (almacen.StockExistente >=detallePedidoProducto.Cantidad)
                                {
                                    almacen.StockExistente = almacen.StockExistente - detallePedidoProducto.Cantidad;
                                    if (almacen.StockExistente<=almacen.StockMinimo)
                                    {
                                        ViewBag.Error = "Stock por debajo del mínimo. Solo Quedan: " + almacen.StockExistente;
                                        return View(vistaPedido);
                                    }
                                    db.SaveChanges();
                                }
                                else
                                {
                                    ViewBag.Error = "No queda tanto stock. Solo Quedan: " + almacen.StockExistente;
                                    return View(vistaPedido);
                                }
    
                            }
    
                            catch
                            {
    
                            }
    
                        }
    
                        db.SaveChanges();
    
    
                        transaccion.Commit();
    
                    }
                    catch(Exception e)
                    {
                        transaccion.Rollback();
                        ViewBag.Error = "Error: " + e.Message;
    
                        list.Add(new Cliente { ClienteID = 0, Nombre = "[Elige un cliente...]" });
                        list = list.OrderBy(c => c.NombreCompleto).ToList();
                        ViewBag.ClienteID = new SelectList(list, "ClienteID", "NombreCompleto");
    
                        list3 = Enum.GetValues(typeof(Horarios)).Cast<Horarios>().Select(v => v.ToString()).ToList();
                        ViewBag.HorarioEntrega = new SelectList(list3, "HorarioEntrega");
    
                        return View(vistaPedido);
                    }
                }
    
    
    
    
                ViewBag.Message = string.Format("La orden: {0}, fue grabada correctamente", pedidoID);
    
                var list2 = db.Clientes.ToList();
                list2.Add(new Cliente { ClienteID = 0, Nombre = "[Elige un cliente...]" });
                list2 = list2.OrderBy(c => c.NombreCompleto).ToList();
                ViewBag.ClienteID = new SelectList(list2, "ClienteID", "NombreCompleto");
    
                list3 = Enum.GetValues(typeof(Horarios)).Cast<Horarios>().Select(v => v.ToString()).ToList();
                ViewBag.HorarioEntrega = new SelectList(list3, "HorarioEntrega");
    
                vistaPedido = new VistaPedido();
                vistaPedido.Cliente = new Cliente();
                vistaPedido.Productoses = new List<PedidoProducto>();
                Session["vistaPedido"] = vistaPedido;
    
                return View(vistaPedido);
    
            }
    
    
            public ActionResult AnadirProducto()    
            {
                var list = db.Productoes.ToList();
                list.Add(new Producto { ProductoID = 0, NombreProducto = "[Elige un producto...]" });
                list = list.OrderBy(c => c.NombreProducto).ToList();
                ViewBag.ProductoID = new SelectList(list, "ProductoID", "NombreProducto");
    
                return View();
            }
    
            // POST:
    
            [HttpPost]
            public ActionResult AnadirProducto(PedidoProducto pedidoProducto)
            {
                var vistaPedido = Session["vistaPedido"] as VistaPedido;
                var list = db.Productoes.ToList();
                var productID = int.Parse(Request["ProductoID"]);
                var a = Request["Cantidad"];
                if (a == "")
                {
    
                    list.Add(new Producto { ProductoID = 0, NombreProducto = "[Elige un producto...]" });
                    list = list.OrderBy(c => c.NombreProducto).ToList();
                    ViewBag.ProductoID = new SelectList(list, "ProductoID", "NombreProducto");
    
                    return View(pedidoProducto);
                }
    
                float cantidad = float.Parse(Request["Cantidad"]);
                if (cantidad <= 0.0 )
                {
    
                    list.Add(new Producto { ProductoID = 0, NombreProducto = "[Elige un producto...]" });
                    list = list.OrderBy(c => c.NombreProducto).ToList();
                    ViewBag.ProductoID = new SelectList(list, "ProductoID", "NombreProducto");
    
                    return View(pedidoProducto);
                }
    
                if(productID==0)
                {
                    //No seleccionó nada...Por tanto lo devolvemos a la vista
                    list.Add(new Producto { ProductoID = 0, NombreProducto = "[Elige un producto...]" });
                    list = list.OrderBy(c => c.NombreProducto).ToList();
                    ViewBag.ProductoID = new SelectList(list, "ProductoID", "NombreProducto");
                    ViewBag.Error = "Debes seleccionar un producto";
                    return View(pedidoProducto);
                }
    
                var producto = db.Productoes.Find(productID);
                if(producto== null)
                {
                    //El producto ya no existe
                    list.Add(new Producto { ProductoID = 0, NombreProducto = "[Elige un producto...]" });
                    list = list.OrderBy(c => c.NombreProducto).ToList();
                    ViewBag.ProductoID = new SelectList(list, "ProductoID", "NombreProducto");
                    ViewBag.Error = "El producto ya no existe";
                    return View(pedidoProducto);
                }
    
                var almacen = (from c in db.Almacenes
                               where c.ProductoID == productID
                               select c).First();
                float stockAlmacen = 0;
    
                    if (almacen.StockExistente >= cantidad) 
                    {
                        stockAlmacen = almacen.StockExistente - cantidad;
                        if (stockAlmacen <= almacen.StockMinimo)
                        {
                            ViewBag.Error = "Stock por debajo del mínimo. Solo Quedan: " + stockAlmacen;
    
    
                        }
                        //El producto si existe ---> lo tenemos que adicionar a la vista
    
                        //Pero antes miramos si ya lo tenemos creado para añadirle la nueva cantidad sin
                        //añadir otro registro.
                        pedidoProducto = vistaPedido.Productoses.Find(p => p.ProductoID == productID);
                        if (pedidoProducto == null)
                        {
                            //No lo encontró... ----> Lo creamos nuevo
                            pedidoProducto = new PedidoProducto
                            {
                                ProductoID = producto.ProductoID,
                                NombreProducto = producto.NombreProducto,
                                PrecioSinIva = producto.PrecioSinIva,
                                Iva = producto.Iva, 
                                Cantidad = float.Parse(Request["Cantidad"]),
                                Descuento = decimal.Parse(Request["Descuento"])
    
                            };
                            vistaPedido.Productoses.Add(pedidoProducto);
                        }
                        else
                        {
                            //Como ya existe, solo le añadimos la nueva cantidad
                            pedidoProducto.Cantidad += float.Parse(Request["Cantidad"]);
                        }
    
                        var list2 = db.Clientes.ToList();
                        list2.Add(new Cliente { ClienteID = 0, Nombre = "[Elige un cliente...]" });
                        list2 = list2.OrderBy(c => c.NombreCompleto).ToList();
                        ViewBag.ClienteID = new SelectList(list2, "ClienteID", "NombreCompleto");
    
                        var list3 = Enum.GetValues(typeof(Horarios)).Cast<Horarios>().Select(v => v.ToString()).ToList();
    
                        ViewBag.HorarioEntrega = new SelectList(list3, "HorarioEntrega");
    
    
                        return View("NuevoPedido", vistaPedido);
    
                    }
                    else
                    {
                        ViewBag.Error = "No queda tanto stock. Solo Quedan: " + almacen.StockExistente;
    
                        list.Add(new Producto { ProductoID = 0, NombreProducto = "[Elige un producto...]" });
                        list = list.OrderBy(c => c.NombreProducto).ToList();
                        ViewBag.ProductoID = new SelectList(list, "ProductoID", "NombreProducto");
    
                        return View(pedidoProducto);
                    }
    
                var list4 = db.Clientes.ToList();
                list4.Add(new Cliente { ClienteID = 0, Nombre = "[Elige un cliente...]" });
                list4 = list4.OrderBy(c => c.NombreCompleto).ToList();
                ViewBag.ClienteID = new SelectList(list4, "ClienteID", "NombreCompleto");
    
                var list5 = Enum.GetValues(typeof(Horarios)).Cast<Horarios>().Select(v => v.ToString()).ToList();
                ViewBag.HorarioEntrega = new SelectList(list5, "HorarioEntrega");
    
    
                return View("NuevoPedido", vistaPedido);
    
            }
    
            //Editar
    
            // GET: Clienteses/Edit/5
            public ActionResult Edit(int? id)
            {
                if (id == null)
                {
                    return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
                }
                Pedido pedido = db.Pedidos.Find(id);
    
                if (pedido == null)
                {
                    return HttpNotFound();
                }
                Horarios a = new Horarios();
    
                ViewBag.ClienteID = new SelectList(db.Clientes, "ClienteID", "NombreCompleto", pedido.ClienteID);
    
                var list = Enum.GetValues(typeof(Horarios)).Cast<Horarios>().Select(v => v.ToString()).ToList();
    
                return View(pedido);
            }
    
            // POST: Clienteses/Edit/5
    
            [HttpPost]
            [ValidateAntiForgeryToken]
    
            public ActionResult Edit([Bind(Include = "PedidoID,FechaPedido,ClienteID,FechaEntrega,HorarioEntrega")] Pedido pedido)
            {
                if (ModelState.IsValid)
                {
    
                            db.Entry(pedido).State = EntityState.Modified;
                            db.SaveChanges();
    
                            var datosCliente = (from c in db.Clientes
                                                  where c.ClienteID == pedido.ClienteID
                                                  select c).First();
                            transaccion.Commit();
    
                            ViewBag.ClienteID = new SelectList(db.Clientes, "ClienteID", "NombreCompleto", pedido.ClienteID);
    
                            var list = Enum.GetValues(typeof(Horarios)).Cast<Horarios>().Select(v => v.ToString()).ToList();
    
    
                            ViewBag.HorarioEntrega = new SelectList(list, "HorarioEntrega");
    
                            return RedirectToAction("NuevoPedido");
    
    
                }
                ViewBag.ClienteID = new SelectList(db.Clientes, "ClienteID", "NombreCompleto", pedido.ClienteID);
    
                var list2 = Enum.GetValues(typeof(Horarios)).Cast<Horarios>().Select(v => v.ToString()).ToList();
                ViewBag.HorarioEntrega = new SelectList(list2, "HorarioEntrega");
    
                return View(pedido);
            }
    
    
            protected override void Dispose(bool disposing)
            {
                if(disposing)
                {
                    base.Dispose(disposing);
                }
    
            }
    
        }
    }
    

     

    Efectivamente, en el GET sobra el parámetro...:-) En mi anterior comentario, empecé hablando del POST y después cambié de opinión y decidí empezar por el GET, pero no cambié la declaración...:-(

    Soy bastante nuevo en esto, así que imagino que verás que el código es mejorable y/o  optimizable...

    Lo que intento hacer es lo siguiente:

    Tengo en una vista 'NuevoPedido': Cuando entro aquí tengo dos botones:

    primer botón es 'añadir producto' y el segundo botón es 'guardar pedido'.

    Si apreto en 'añadir producto' se va a otra vista donde elijo el producto que quiero añadir, la cantidad y un descuento. Cuando apreto el botón 'añadir Producto' (Post) entonces vuelve a la vista nuevo pedido, mostrándome el producto añadido a ese pedido...

    Esta acción la puedo repetir tantas veces como quiera.

    Una vez he acabado de añadir todos los productos a mi pedido, entonces debo seleccionar el cliente, la fecha de entrega y el horario de entrega (Este es el que viene del Enum Horarios).

    Si los datos (cliente, fechaEntrega y HorarioEntrega) están rellenados, entonces debe grabar el pedido en BBDD.

    He puesto en mi código lo último que me has propuesto:

    Si buscas esto: "INICIO DEL CÓDIGO QUE HE COPIADO DE TU RESPUESTA" verás donde lo he puesto.

    Pero en :

                pedidoSesion.Pedido.ClienteID, pedidoSesion.Pedido.FechaPedido, pedidoSesion.Pedido.FechaEntrega y
                pedidoSesion.Pedido.HorarioEntrega 

    Tengo todo a NULL...:-(

    Que es lo que hago mal?

    Gracias.

    Un saludo.

    domingo, 27 de diciembre de 2015 13:35
  • Hola Asier,

    No se si has podido mirar lo que puse ayer, o si lo que puse es bastante claro...

    A mi me cuesta un poco seguir mi código...:-(

    Yo lo que busco exactamente es recuperar lo que el usuario haya seleccionado en una lista que le muestra los diferentes horarios...

    Mi idea era hacer esto: 

    var horariosEntrega =Request["HorarioEntrega"];

    Del mismo modo que recupero la fecha introducida por el usuario de este modo:

    var fechaEntrega = Request["FechaEntrega"];

    En este segundo caso si que funciona, pero en el primero no...:-(

    Como puedo recuperar lo que hay en ese dropdownlist? Y que sea del tipo Horarios.

    Ya que con el Request

    var horariosEntrega =Request["HorarioEntrega"];

    Tengo el siguiente error: "No se puede convertir implicitamente el tipo 'string' en 'MiContexto.Models.Horarios'

    Gracias.

    Un saludo.


    lunes, 28 de diciembre de 2015 8:30