Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Alterar e exibir os dados ja cadastrados pelo mesmo form de cadastro

Estou fazendo um blog e tenho um form para cadastro de noticias. Queria saber como exibo e altero a noticia nesse mesmo form que hoje so serve para cadastro. Ja fiz o metodo no controller que busca uma noticia pelo Id, mas preciso saber o que faco no controller para que se tiver parametro na url ele de o comando de alterar e se nao tiver ele de o comando de cadastrar esses dados. E tambem se tiver parametro como posso mostrar os dados nos textbox com o razor atraves da ViewBag. Atualmente minha view esta assim:



    @Html.LabelFor(n => n.Titulo, "Titulo:")
    @Html.TextBoxFor(n => n.Titulo, new { @class="form-control" })
    @Html.ValidationMessageFor(n => n.Titulo)

    @Html.LabelFor(n => n.Texto, "Texto:")
    @Html.TextBoxFor(n => n.Texto, new { @class="form-control" })
    @Html.ValidationMessageFor(n => n.Texto)

E meu controller assim:

   [Route("Noticias/{id}", Name = "AtualizarNoticia")]
        public ActionResult Form(int id)
        {
            Noticia noticia = noticiaDAO.BuscaPorId(id);
            ViewBag.Noticia = noticia;
            ViewBag.Categorias = categoriaDAO.Lista();
            return View();
        }
6 respostas

Olá Lucas,

No caso se você vai usar os métodos do Razor para gerar o inputs, como o TextBoxFor, você não consegue trabalhar com a ViewBag com eles. Estes métodos funcionam apenas com a View Fortemente Tipada, em que você mandaria a notícia no retorno da sua View().

Quanto a usar o mesmo formulário tanto para atualizar quanto para cadastrar, você precisará verificar se ele tem id ou não. Se o id for maior do que 0 é de alguma notícia que já existe, então você estará atualizando. Se for 0, então não tem notícia e será o cadastro.

Valeu pela resposta Lucas, ja consegui mostrar os dados, minha duvida agora e, como vou fazer para saber se vai ser uma alteracao ou uma insercao no controller ? Atualmente estou mandando a view para o controller que so faz insercao de dados:

        public ActionResult Inserir(Noticia noticia)
        {
            if (ModelState.IsValid)
            {

                noticiaDAO.Inserir(noticia);

                return RedirectToAction("Lista");
            }
            else
            {
                return View("Form", noticia);
            }

        }
solução!

Olá Lucas,

depois de verificar que a notícia está válida, para saber se você irá inserir ou alterar é necessário ver se o id está preenchido. Caso o formulário tenha enviado o id (o número ser maior que 0), então você precisa atualizar a notícia. Caso contrário, precisa inserir ela no banco.

Legal Lucas, deu certo . Estou passando o id por um textbox, mas nao queria deixar id a mostra, voce sabe uma forma melhor de eu mandar o id para o controller ? Obrigado :)

Olá Lucas,

existe um tipo de input chamado de hidden que faz justamente este processo de esconder na tela pro usuário e mesmo assim envia na requisição pro servidor. Aqui um link da W3C sobre tudo que você consegue fazer com inputs e tem um exemplo do tipo hidden.

Valeu Lucas, tu tem alguma forma de contato (rede social, email) ?