コード例 #1
0
        public async Task <IActionResult> Edit(string id, [Bind("ID,Nome,Validade,DataDeCriacao,Password,ServicoFK,Enviado")] Partilhavel partilhavel,
                                               string PhotosIDs, string returnUrl)
        {
            if (id != partilhavel.ID)
            {
                return(NotFound());
            }

            if (String.IsNullOrEmpty(PhotosIDs))
            {
                ModelState.AddModelError("Fotografia", "Não foram selecionadas fotografias.");
            }

            if (ModelState.IsValid)
            {
                #region Associar fotografias ao partilhável
                try
                {
                    var toRemoveArray = await _context.Partilhaveis_Fotografias.Where(pf => pf.PartilhavelFK.Equals(partilhavel.ID)).ToArrayAsync();

                    _context.RemoveRange(toRemoveArray);

                    var toAddArray = PhotosIDs.Split(",").Select(f => new Partilhavel_Fotografia()
                    {
                        PartilhavelFK = partilhavel.ID,
                        FotografiaFK  = Int32.Parse(f)
                    }).ToArray();

                    await _context.AddRangeAsync(toAddArray);
                }
                catch (Exception e)
                {
                    await _logger.LogError(
                        descricao : "Erro ao editar Partilhavel, Partilhaveis_Fotografias.",
                        classe : "PartilhaveisController",
                        metodo : "Edit",
                        erro : e.Message
                        );
                }
                #endregion

                try
                {
                    _context.Update(partilhavel);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException e)
                {
                    if (!PartilhavelExists(partilhavel.ID))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        await _logger.LogError(
                            descricao : "Erro ao editar Partilhavel.",
                            classe : "PartilhaveisController",
                            metodo : "Edit",
                            erro : e.Message
                            );
                    }
                }

                TempData["Feedback"] = "Partilhável editado com sucesso.";
                TempData["Type"]     = "success";
                return(RedirectToAction("Details", new { id = partilhavel.ID }));
            }

            returnUrl             = returnUrl ?? Url.Action("Index", "Partilhaveis");
            ViewData["returnUrl"] = returnUrl;

            return(View(new PartilhavelEditViewModel()
            {
                Partilhavel = partilhavel,
                PhotosIDs = PhotosIDs
            }));
        }
コード例 #2
0
        public async Task <IActionResult> Create([Bind("ID,Nome,Validade,Password,ServicoFK")] Partilhavel partilhavel,
                                                 string PhotosIDs, string returnUrl, bool usePassword = false)
        {
            if (String.IsNullOrEmpty(PhotosIDs))
            {
                ModelState.AddModelError("Fotografia", "Não foram selecionadas fotografias.");
            }

            if (ModelState.IsValid)
            {
                #region Associar fotografias ao partilhável
                try
                {
                    var pfList = PhotosIDs.Split(',').Select(photoId => new Partilhavel_Fotografia()
                    {
                        FotografiaFK  = Int32.Parse(photoId),
                        PartilhavelFK = partilhavel.ID
                    }).ToList();

                    partilhavel.Partilhaveis_Fotografias = pfList;
                }
                catch (Exception e)
                {
                    await _logger.LogError(
                        descricao : "Erro associar fotografias a um novo partilhável.",
                        classe : "PartilhaveisController",
                        metodo : "Create",
                        erro : e.Message
                        );
                }
                #endregion

                #region Tratamento da password
                // Caso o utilizador não deseje ser ele a escolher a password
                // Irá ser criada uma password pela aplicação
                if (!usePassword)
                {
                    // Cria um id, ex: "a0f118c8-8e40-4433-a695-e5ca01788331", escolhe apenas "a0f118c8"
                    partilhavel.Password = Guid.NewGuid().ToString().Split('-')[0];
                }
                #endregion

                try
                {
                    partilhavel.DataDeCriacao = DateTime.Now;
                    partilhavel.Enviado       = false;
                    _context.Add(partilhavel);
                    await _context.SaveChangesAsync();
                }
                catch (Exception e)
                {
                    await _logger.LogError(
                        descricao : "Erro ao criar Partilhavel.",
                        classe : "PartilhaveisController",
                        metodo : "Create",
                        erro : e.Message
                        );
                }

                TempData["Feedback"] = "Partilhável criado com sucesso.";
                TempData["Type"]     = "success";
                return(RedirectToAction("Details", new { id = partilhavel.ID }));
            }

            partilhavel.Servico = await _context.Servicos.FindAsync(partilhavel.ServicoFK);

            returnUrl             = returnUrl ?? Url.Action("Index", "Partilhaveis");
            ViewData["returnUrl"] = returnUrl;

            return(View(partilhavel));
        }