public ActionResult Create(Patrocinante patrocinante)
        {
            if (patrocinante.Nombre != null && patrocinante.Contacto[0].Nombre != null && patrocinante.Contacto[0].ListaTelefonos[0].CodigoInt != 0 &&
                patrocinante.Contacto[0].ListaTelefonos[0].CodigoLoc != 0 && patrocinante.Contacto[0].ListaTelefonos[0].Numero != 0)
            {
                if (patrocinante.File != null)
                {
                    HttpFileCollectionBase files = ControllerContext.HttpContext.Request.Files;
                    var repoImagen = new ImageneRepositorio();
                    patrocinante.Imagene = new Imagene();
                    patrocinante.Imagene.DatosOriginal = ConvertFile(patrocinante.File);
                    patrocinante.Imagene.DatosTrans = Resize(ConvertFile(patrocinante.File));
                    patrocinante.Imagene.Link = patrocinante.Link;
                    patrocinante.Contacto[0].Tipo = "P";
                    for (int i = 0; i < patrocinante.Contacto[0].ListaTelefonos.Count; i++)
                    {
                        patrocinante.Contacto[0].ListaTelefonos[i].Tipo = "P";
                    }
                    patrocinante.Contacto[0].IdEmpresa = null;

                    var tipo = Request["Logo"] as string;
                    if (tipo == "Sponsor")
                    {
                        patrocinante.Imagene.Tipo = "S";
                    }
                    else
                    {
                        patrocinante.Imagene.Tipo = "L";
                    }

                    IRepositorio<Patrocinante> repoPatrocinante = new PatrocinanteRepositorio();
                    repoPatrocinante.Save(patrocinante);

                    IRepositorio<Contacto> repoContacto = new ContactoRepositorio();
                    patrocinante.Contacto[0].IdPatrocinante = patrocinante.IdPatrocinante;
                    repoContacto.Save(patrocinante.Contacto[0]);

                    IRepositorio<Telefono> repoTelefono = new TelefonoRepositorio();
                    foreach (var telefono in patrocinante.Contacto[0].ListaTelefonos)
                    {
                        telefono.IdContacto = patrocinante.Contacto[0].IdContacto;
                        repoTelefono.Save(telefono);
                    }

                    patrocinante.Imagene.IdPatrocinante = patrocinante.IdPatrocinante;
                    repoImagen.Save(patrocinante.Imagene);

                    return RedirectToAction("Index");
               }
            }
            // Si llegamos a este punto, es que se ha producido un error y volvemos a mostrar el formulario
            while (patrocinante.Contacto[0].ListaTelefonos.Count < 4)
            {
                patrocinante.Contacto[0].ListaTelefonos.Add(new Telefono());
            }
            return View(patrocinante);
        }
        public ActionResult Index(String tipo, string patrocinante)
        {
            IRepositorio<Patrocinante> repoPatrocinante = new PatrocinanteRepositorio();
            IList<Patrocinante> patrocinantesAux = new List<Patrocinante>();
            IList<Patrocinante> patrocinantes = repoPatrocinante.GetAll();

            IRepositorio<Telefono> repoTelefono = new TelefonoRepositorio();
            IList<Telefono> TodosTelefonos = repoTelefono.GetAll();
            IList<Telefono> telefonos = new List<Telefono>();

            IRepositorio<Contacto> repoContacto = new ContactoRepositorio();
            IList<Contacto> TodosContactos = repoContacto.GetAll();
            IList<Contacto> contactos = new List<Contacto>();

            IRepositorio<Imagene> repoImagen = new ImageneRepositorio();
            IList<Imagene> imagenes = repoImagen.GetAll();

            foreach (var patrocinante1 in patrocinantes)
            {
                foreach (var contacto in TodosContactos)
                {
                    if (contacto.IdPatrocinante == patrocinante1.IdPatrocinante)
                    {
                        foreach (var telefono in TodosTelefonos)
                        {
                            if (telefono.IdContacto == contacto.IdContacto)
                            {
                                telefonos.Add(telefono);
                            }
                        }
                        contacto.ListaTelefonos = telefonos;
                        telefonos = new List<Telefono>();
                        contactos.Add(contacto);
                    }
                }
                patrocinante1.Contacto = contactos;
                contactos = new List<Contacto>();

                foreach (var imagene in imagenes)
                {
                    if (imagene.IdPatrocinante != null)
                        if (imagene.IdPatrocinante == patrocinante1.IdPatrocinante)
                        {
                            patrocinante1.Imagene = imagene;
                            if (tipo != null)
                            {
                                if (tipo == "S")
                                {
                                    if (imagene.Tipo == "S")
                                        patrocinantesAux.Add(patrocinante1);
                                }
                                else
                                {
                                    if (imagene.Tipo == "L")
                                        patrocinantesAux.Add(patrocinante1);
                                }
                            }
                        }
                }
            }
            if (tipo != null)
            {
                if (patrocinante != null)
                {
                    IList<Patrocinante> patrocinantesBuscados = new List<Patrocinante>();
                    foreach (var patrocinante1 in patrocinantesAux)
                    {
                        if (patrocinante1.Nombre == patrocinante)
                        {
                            patrocinantesBuscados.Add(patrocinante1);
                        }
                    }
                    return View(patrocinantesBuscados);
                }
                return View(patrocinantesAux);
            }

            if (patrocinante != null)
            {
                IList<Patrocinante> patrocinantesBuscados = new List<Patrocinante>();
                foreach (var patrocinante1 in patrocinantes)
                {
                    if (patrocinante1.Nombre == patrocinante)
                    {
                        patrocinantesBuscados.Add(patrocinante1);
                    }
                }
                return View(patrocinantesBuscados);
            }
            return View(patrocinantes);
        }
        public ActionResult Find(string q)
        {
            IRepositorio<Patrocinante> repoP = new PatrocinanteRepositorio();
            IList<Patrocinante> patrocinantes = repoP.GetAll();
            IList<Patrocinante> posiblesPatrocinantes = new List<Patrocinante>();

            foreach (var item in patrocinantes)
            {
                if (item.Nombre.Contains(q.ToUpper()) || item.Nombre.Contains(q.ToLower()))
                {
                    posiblesPatrocinantes.Add(item);
                }
            }
            string[] emp = new string[posiblesPatrocinantes.Count];
            int i = 0;
            foreach (var patrocinante in posiblesPatrocinantes)
            {
                emp[i] = patrocinante.Nombre;
                i++;
            }

            return Content(string.Join("\n", emp)); ;
        }
        public ActionResult Edit(Patrocinante patrocinante)
        {
            patrocinante.Contacto[0].Tipo = "P";
            patrocinante.Contacto[0].IdPatrocinante = patrocinante.IdPatrocinante;
            foreach (var telefono in patrocinante.Contacto[0].ListaTelefonos)
            {
                telefono.Tipo = "P";
            }
            patrocinante.Contacto[0].IdEmpresa = null;

            IRepositorio<Imagene> repoImagen = new ImageneRepositorio();
            patrocinante.Contacto[0].IdEmpresa = null;

            IList<Imagene> imagenes = repoImagen.GetAll();
            patrocinante.Imagene.IdPatrocinante = patrocinante.IdPatrocinante;
            foreach (var imagene in imagenes)
            {
                if (imagene.IdPatrocinante == patrocinante.IdPatrocinante)
                {
                    patrocinante.Imagene.IdImagen = imagene.IdImagen;
                    if (patrocinante.File == null)
                    {
                        patrocinante.Imagene.DatosOriginal = imagene.DatosOriginal;
                        patrocinante.Imagene.DatosTrans = imagene.DatosTrans;
                    }
                }
            }

            var tipo = Request["Logo"] as string;
            if (tipo == "Sponsor")
            {
                patrocinante.Imagene.Tipo = "S";
            }
            else
            {
                patrocinante.Imagene.Tipo = "L";
            }
            if (patrocinante.File != null)
            {
                HttpFileCollectionBase files = ControllerContext.HttpContext.Request.Files;
                patrocinante.Imagene.DatosOriginal = ConvertFile(patrocinante.File);
                patrocinante.Imagene.DatosTrans = Resize(ConvertFile(patrocinante.File));
            }

            if (patrocinante.Nombre != null && patrocinante.Contacto[0].Nombre != null && patrocinante.Contacto[0].ListaTelefonos[0].CodigoInt != 0 &&
                patrocinante.Contacto[0].ListaTelefonos[0].CodigoLoc != 0 && patrocinante.Contacto[0].ListaTelefonos[0].Numero != 0)
            {
                IRepositorio<Patrocinante> repoPatrocinante = new PatrocinanteRepositorio();
                repoPatrocinante.Update(patrocinante);

                IRepositorio<Contacto> repoContacto = new ContactoRepositorio();
                patrocinante.Contacto[0].IdPatrocinante = patrocinante.IdPatrocinante;
                repoContacto.Update(patrocinante.Contacto[0]);

                IRepositorio<Telefono> repoTelefono = new TelefonoRepositorio();
                foreach (var telefono in patrocinante.Contacto[0].ListaTelefonos)
                {
                    telefono.IdContacto = patrocinante.Contacto[0].IdContacto;
                    if (telefono.CodigoInt != 0 && telefono.CodigoLoc != 0 && telefono.Numero != 0)
                        if (telefono.IdTelefono != 0)
                            repoTelefono.Update(telefono);
                        else
                            repoTelefono.Save(telefono);
                }

                repoImagen.Update(patrocinante.Imagene);

                return RedirectToAction("Index");
            }
            // Si llegamos a este punto, es que se ha producido un error y volvemos a mostrar el formulario
            while (patrocinante.Contacto[0].ListaTelefonos.Count < 4)
            {
                patrocinante.Contacto[0].ListaTelefonos.Add(new Telefono());
            }
            return View(patrocinante);
        }
        public ActionResult Edit(int id)
        {
            IRepositorio<Patrocinante> repoPatrocinante = new PatrocinanteRepositorio();
            IList<Patrocinante> patrocinantesAux = new List<Patrocinante>();
            Patrocinante patrocinante = repoPatrocinante.GetById(id);

            IRepositorio<Telefono> repoTelefono = new TelefonoRepositorio();
            IList<Telefono> TodosTelefonos = repoTelefono.GetAll();
            IList<Telefono> telefonos = new List<Telefono>();

            IRepositorio<Contacto> repoContacto = new ContactoRepositorio();
            IList<Contacto> TodosContactos = repoContacto.GetAll();
            IList<Contacto> contactos = new List<Contacto>();

            IRepositorio<Imagene> repoImagen = new ImageneRepositorio();
            IList<Imagene> imagenes = repoImagen.GetAll();

            foreach (var contacto in TodosContactos)
            {
                if (contacto.IdPatrocinante == patrocinante.IdPatrocinante)
                {
                    foreach (var telefono in TodosTelefonos)
                    {
                        if (telefono.IdContacto == contacto.IdContacto)
                        {
                            telefonos.Add(telefono);
                        }
                    }
                    contacto.ListaTelefonos = telefonos;
                    contactos.Add(contacto);
                }
            }
            patrocinante.Contacto = contactos;
            foreach (var imagene in imagenes)
            {
                if (imagene.IdPatrocinante == patrocinante.IdPatrocinante)
                {
                    patrocinante.Imagene = imagene;
                }
            }
            while (patrocinante.Contacto[0].ListaTelefonos.Count < 4)
            {
                patrocinante.Contacto[0].ListaTelefonos.Add(new Telefono());
            }
            return View(patrocinante);
        }
        public ActionResult Delete(int id)
        {
            IRepositorio<Patrocinante> repo = new PatrocinanteRepositorio();

            IRepositorio<Contacto> repoContacto = new ContactoRepositorio();
            IList<Contacto> contactos = repoContacto.GetAll();
            Contacto contactoBuscado = null;
            foreach (var contacto in contactos)
            {
                if (contacto.IdPatrocinante == id)
                {
                    contactoBuscado = contacto;
                    break;
                }
            }

            IRepositorio<Telefono> repoTelefono = new TelefonoRepositorio();
            IList<Telefono> telefonos = repoTelefono.GetAll();
            Patrocinante patrocinante = repo.GetById(id);
            foreach (var telefono in telefonos)
            {
                if (telefono.IdContacto == contactoBuscado.IdContacto)
                {
                    repoTelefono.Delete(telefono);
                    break;
                }
            }
            repo.Delete(patrocinante);
            return RedirectToAction("Index");
        }