public ActionResult Details(int id)
 {
     try
     {
         var prodLN = new ProductoLN();
         var producto = prodLN.Select(new Product { ProductID = id });
         return View(producto);
     }
     catch (Exception ex)
     {
         ViewBag.ErrorDescription = ex.ToString();
         ViewData["Controller"] = ControllerContext.RouteData.Values["Controller"].ToString();
         ViewData["Action"] = ControllerContext.RouteData.Values["Action"].ToString();
         return View("Error");
     }
 }
        //UpdateModel.
        //En este caso se está restringiendo a que solo se tomen los datos del form data.        
        //[HttpPost]
        //public ActionResult Create(FormCollection formData)
        //{
        //    try
        //    {
        //        //Explicit Binding usando UpdateModel
        //        var producto = new Product();
        //        
        //        //Tiene el mismo efecto que hacer: UpdateModel(producto, new FormValueProvider(ControllerContext))
        //        UpdateModel(producto, formData);
        //
        //        var prodLN = new ProductoLN();
        //        producto.RowGuid = Guid.NewGuid();
        //        producto.ModifiedDate = DateTime.Now;
        //        prodLN.Insert(producto);
        //        return RedirectToAction("Index");
        //    }
        //    catch (Exception ex)
        //    {
        //        ViewBag.ErrorDescription = ex.ToString();
        //        ViewData["Controller"] = ControllerContext.RouteData.Values["Controller"].ToString();
        //        ViewData["Action"] = ControllerContext.RouteData.Values["Action"].ToString();
        //        return View("Error");
        //    }
        //}

        //TryUpdateModel.
        //Los usuarios pueden proporcionar valores que no pueden ser enlazados a la correspondiente propiedad del modelo, 
        //tal como fechas inválidas o valores de texto para campos numéricos.
        //Cuando invocamos al model binding explícitamente, tenemos la responsabilidad de hacer frente a tales errores. 
        //El model binging expresa errores de enlace lanzando la excepción InvalidOperationException.
        //Como un enfoque alternativo, podemos utilizar el método TryUpdateModel, que devuelve true si el proceso de enlace tiene éxito
        //y false si hay errores. La única razón para favorecer el uso de TryUpdateModel sobre UpdateModel, 
        //es por la simplicidad del tratamiento de excepciones, pero no hay ninguna diferencia funcional en el proceso.
        //[HttpPost]
        //public ActionResult Create(FormCollection formData)
        //{
        //    try
        //    {
        //        //Explicit Binding usando TryUpdateModel
        //        var producto = new Product();
        //        if (TryUpdateModel(producto, formData))
        //        {
        //            var prodLN = new ProductoLN();
        //            producto.RowGuid = Guid.NewGuid();
        //            producto.ModifiedDate = DateTime.Now;
        //            prodLN.Insert(producto);
        //            return RedirectToAction("Index");
        //        }
        //        else
        //        {
        //            //Comentar el ValidationMessageFor en la vista Create para el campo ProductNumber,
        //            //con la finalidad de que la vista no valide el campo y podamos forzar un error.
        //            string error = "ERROR EN EL MODEL BINDING!!!";
        //            foreach (var modelErrors in ModelState)
        //                if (modelErrors.Value.Errors.Count > 0)
        //                    error += " - " + modelErrors.Value.Errors[0].ErrorMessage;
        //            ViewBag.ErrorDescription = error;
        //            return View("Error");
        //        }
        //    }
        //    catch (Exception ex)
        //    {
        //        ViewBag.ErrorDescription = ex.ToString();
        //        ViewData["Controller"] = ControllerContext.RouteData.Values["Controller"].ToString();
        //        ViewData["Action"] = ControllerContext.RouteData.Values["Action"].ToString();
        //        return View("Error");
        //    }
        //}

        public ActionResult Edit(int id)
        {
            try
            { 
                var prodLN = new ProductoLN();
                ViewBag.ProductModels = prodLN.GetProductModels();
                ViewBag.ProductSubcategories = prodLN.GetProductSubsctegories();
                ViewBag.UnitMeasures = prodLN.GetUnitMeasures();
                var producto = prodLN.Select(new Product { ProductID = id });
                return View(producto);
            }
            catch (Exception ex)
            {
                ViewBag.ErrorDescription = ex.ToString();
                ViewData["Controller"] = ControllerContext.RouteData.Values["Controller"].ToString();
                ViewData["Action"] = ControllerContext.RouteData.Values["Action"].ToString();
                return View("Error");
            }
        }