// GET: Noticias/Create public ActionResult Create() { //variavel auxiliar que representa todas as categorias var categorias = db.Categorias.ToList(); //modelo view model para receber dados de uma noticia e um array de checkbox para inserir na noticia var model = new CreateNoticiaViewModel(); //definir que o array de categorias tem dimensao de quantas categorias existe na base de dados model.IdsCategorias = new int[db.Categorias.Count()]; //representa todas as categorias que existem na base de dados model.ListaCategorias = categorias; //apresenta a view para criar uma noticia return(View(model)); }
// GET: Noticias/Edit/5 public ActionResult Edit(int?id) { //como int? indica que id pode ser null //se o id for null if (id == null) { //Rediriciona para Home page return(RedirectToAction("Index")); } //encontrar uma noticia com o id Noticias noticia = db.Noticias.Find(id); //verificar se foi possivel encontrar a noticia com id if (noticia == null) { //Nao existe Noticia com o id respetivo //Redireciona para home page return(RedirectToAction("Index")); } //variavel auxiliar que representa todas as Categorias da base de dados var categorias = db.Categorias.ToList(); //View model que permite receber dados de uma noticia e os valores da checkbox com os id's das categorias var model = new CreateNoticiaViewModel(); //iterador auxiliar var i = 0; //Definir o tamanho do array das categorias model.IdsCategorias = new int[noticia.ListaCategorias.Count()]; //preencher o array foreach (var categoriaID in noticia.ListaCategorias) { model.IdsCategorias[i] = categoriaID.ID; i++; } //variavel de sessao guardar o id da noticia a alterar Session["noticiaID"] = noticia.ID; //preencher os dados do view model model.ListaCategorias = categorias; model.Data = noticia.Data; model.Capa = noticia.Capa; model.Titulo = noticia.Titulo; model.Descricao = noticia.Descricao; model.Conteudo = noticia.Conteudo; //retornar a view return(View(model)); }
public ActionResult Edit(FormCollection formulario, HttpPostedFileBase capaUpload) { //como o metodo recebe um formulário //preencher os dados consoante os campos do formulário // pesquisar pela noticia consoante a variavel de sessao noticiaID => esta variavel é preenchida no get do Metodo Edit Noticias noticia = db.Noticias.Find((int)Session["noticiaID"]); //preencher os campos da noticia com os campos do formulário noticia.Titulo = formulario["Titulo"]; noticia.Conteudo = formulario["Conteudo"]; noticia.Descricao = formulario["Descricao"]; //Preencher a data com o dia em que a noticia foi alterada noticia.Data = System.DateTime.Now; //preencher o autor com o utilizador que está logado var idUtilizador = db.Utilizadores.Where(d => d.Username == User.Identity.Name).FirstOrDefault(); noticia.UtilizadorFK = idUtilizador.ID; //criar uma lista auxiliar ICollection <Categorias> listaCat = new List <Categorias> { }; //variaveis auxiliares para tratamento da Capa string caminhoNoticia = ""; string nomeAntigo = formulario["Capa"]; //verificação se foi inserido algum ficheiro if (capaUpload != null) { string nomeCapa = "Noticia" + noticia.ID + DateTime.Now.ToString("_yyyyMMdd_hhmmss") + Path.GetExtension(capaUpload.FileName).ToLower(); //verificar se o ficheiro inserido é uma imagem if (capaUpload.ContentType.Contains("image")) { noticia.Capa = nomeCapa; caminhoNoticia = Path.Combine(Server.MapPath("~/imagens/Noticias/"), nomeCapa); capaUpload.SaveAs(Path.Combine(Server.MapPath("~/imagens/Noticias/"), nomeCapa)); //Apagar no disco a imagem System.IO.File.Delete(Path.Combine(Server.MapPath("~/imagens/Noticias/"), nomeAntigo)); } } //ficheiro nao inserido else { //definir a capa com o valor do formulario noticia.Capa = formulario["Capa"]; } //se alguma checkbox estiver preenchida if (formulario["idsCategorias"] != null) { //se no formulario existem checkbox's preenchidas,estes valores tem que ser separados var valoresCheckbox = formulario["idsCategorias"].Split(','); //percorrer o array de valores de checkbox foreach (var categoria in db.Categorias.ToList()) { //se o array do formulario tiver o id da categoria if (valoresCheckbox.Contains(categoria.ID.ToString())) { //adicionar na lista auxiliar a categoria listaCat.Add(categoria); // se a categoria nao pertenca aquela noticia if (!categoria.ListaNoticias.Contains(noticia)) { //adicionar na categoria a noticia categoria.ListaNoticias.Add(noticia); } } //Verificar os valores que nao estao a true na checkbox else { //Verificar se a categoria pertence aquela noticia if (categoria.ListaNoticias.Contains(noticia)) { //como nao esta a true remover na categoria a noticia categoria.ListaNoticias.Remove(noticia); } } } //prencher a noticia com a lista auxiliar noticia.ListaCategorias = listaCat; } //caso nao foi preenchida nenhuma das checkbox's else { //mensagem de erro a indicar ao utilizador que as checkbox's sao de preenchimento obrigatorio ModelState.AddModelError("", "Categorias de Preenchimento Obrigatório!"); //criar um view model CreateNoticiaViewModel model = new CreateNoticiaViewModel { }; //preencher o view model com os dados da noticia model.Capa = noticia.Capa; model.Conteudo = noticia.Conteudo; model.Descricao = noticia.Descricao; model.Titulo = noticia.Titulo; model.Data = System.DateTime.Now; model.ListaCategorias = db.Categorias.ToList(); model.IdsCategorias = new int[db.Categorias.Count()]; //redirecionar para a view com a mensagem de erro return(View(model)); } try { if (ModelState.IsValid) { //guardar os dados da Noticia db.Entry(noticia).State = EntityState.Modified; //efetuar o commit db.SaveChanges(); //enviar os dados para a pagina inicial return(RedirectToAction("Index")); } } catch (Exception) { ModelState.AddModelError("", "Não foi possivel concretizar a operação."); } return(View(noticia)); }
public ActionResult Create(CreateNoticiaViewModel model, HttpPostedFileBase capaUpload) { //Criar uma noticia var noticia = new Noticias(); //Definir o id da Noticia noticia.ID = db.Noticias.Max(c => c.ID) + 1; //Definir a data da Noticia model.Data = DateTime.Now; //Definir campos auxiliares para o nome da Capa da noticia e para guardar no disco a Imagem da Noticia string nomeCapa = "Noticia" + noticia.ID + ".jpg"; string caminhoNoticia = ""; //verificação se foi inserido um ficheiro if (capaUpload != null) { //Verificar se o ficheiro é uma imagem if (capaUpload.ContentType.Contains("image")) { //Definir o nome da Capa model.Capa = nomeCapa; //guardar na variavel auxiliar o caminho para onde guardar a imagem caminhoNoticia = Path.Combine(Server.MapPath("~/imagens/Noticias/"), nomeCapa); } } //ficheiro nao inserido else { model.IdsCategorias = new int[db.Categorias.Count()]; model.ListaCategorias = db.Categorias.ToList(); //gerar mensagem de erro para indicar o utilizador que nao foi inserida nenhuma imagem ModelState.AddModelError("", "Não foi inserida uma imagem"); //redirecionar o utilizador para a View return(View(model)); } //Preencher os dados do view model para a noticia noticia.Titulo = model.Titulo; noticia.Descricao = model.Descricao; noticia.Conteudo = model.Conteudo; noticia.Capa = model.Capa; noticia.Data = model.Data; //variavel que representa o utilizador logado var idUtilizador = db.Utilizadores.Where(d => d.Username == User.Identity.Name).FirstOrDefault(); //inserir na noticia o autor do utilizador que está logado noticia.UtilizadorFK = idUtilizador.ID; //percorrer o array das checkbox's do view model if (model.IdsCategorias == null) { model.IdsCategorias = new int[db.Categorias.Count()]; model.ListaCategorias = db.Categorias.ToList(); //gerar mensagem de erro para indicar o utilizador que nao foi inserida nenhuma imagem ModelState.AddModelError("", "Categorias de Preenchimento Obrigatório!"); //redirecionar o utilizador para a View return(View(model)); } foreach (var idCategoria in model.IdsCategorias.ToList()) { //variavel que representa o id da categoria var categoria = db.Categorias.Find(idCategoria); //Adicionar à noticia a categoria noticia.ListaCategorias.Add(categoria); } try { if (ModelState.IsValid) { //adiciona uma noticia à base de dados db.Noticias.Add(noticia); //efecta um comit na base de dados db.SaveChanges(); //guardar a imagem no servidor capaUpload.SaveAs(caminhoNoticia); //redireciona o utilizador para a pagina de inicio return(RedirectToAction("Index")); } } catch (Exception) { //Falta por uma pagina de erro personalizada ModelState.AddModelError("", "Ocorreu um erro na criação da Noticia" + noticia.ID + "."); return(RedirectToAction("Index")); } return(View(noticia)); }