ASP .NET MVC 5 - Cadastro de Produtos (com imagem) - III
Neste tutorial vou mostrar como implementar um Cadastro de Produtos com imagem e realizar as operações de manutenção de produtos. |
Vamos continuar a segunda parte do artigo e implementar a exclusão e a visualização de detalhes dos produtos.
Recursos Usados:
Deletando um produto
Para deletar um produto vamos definir os métodos Action Delete(GET/POST) no controlador ProdutosController:
// GET: Produtos/Delete/5
public ActionResult Delete(int? id)
{
if (id == null)
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
Produto produto = db.Produtos.Find(id);
if (produto == null)
{
return HttpNotFound();
}
ViewBag.Categoria = db.Categorias.Find(produto.CategoriaId).CategoriaNome;
return View(produto);
}
// POST: Produtos/Delete/5
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public ActionResult DeleteConfirmed(int id)
{
Produto produto = db.Produtos.Find(id);
db.Produtos.Remove(produto);
db.SaveChanges();
return RedirectToAction("Index");
}
|
O método Delete(GET) apresenta a view Delete onde o usuário deve confirmar a exclusão do produto selecionado.
Observe que estamos usando o atributo ActionName para a Action DeleteConfirmed() que nos permite especificar um nome de Action diferente do nome do método usado.
Criando a view para deletar um produto
Clique com o botão direito sobre o método Action Delete do controlador ProdutosController e a seguir clique em Add View;
Aceite os valores definidos na janela Add View e clique em Add:
A seguir inclua o código abaixo:
@model Mvc_Imagem.Models.Produto
@{
ViewBag.Title = "Deletar";
}
<h2>Deletar Produto</h2>
<h3 class="text-danger">Deseja deletar este produto ?</h3>
<div class="form-horizontal">
<div class="form-group">
@Html.LabelFor(m => m.Nome, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.TextBoxFor(m => m.Nome,
new { @class = "form-control", @disabled = "disabled" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(m => m.Descricao, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.TextBoxFor(m => m.Descricao,
new { @class = "form-control", @disabled = "disabled" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(m => m.Preco, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.TextBoxFor(m => m.Preco,
new { @class = "form-control", @disabled = "disabled" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(m => m.Categoria.CategoriaNome, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.TextBoxFor(m => m.CategoriaId, ((String)ViewBag.Categoria),
new { @class = "form-control", @disabled = "disabled" })
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<img src="@Model.Imagem" alt="@Model.Nome image" class="img-thumbnail" />
</div>
</div>
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Deletar Produto" class="btn btn-danger" />
@Html.ActionLink("Cancelar", "Index", null, new { @class = "btn btn-warning" })
</div>
</div>
}
</div>
|
No código desta View usamos a view model Produto para exibir as informações do produto com sua imagem que desejamos deletar.
Executando o projeto iremos obter:
Ao selecionar um produto e clicar no link Deletar veremos a view Delete exibindo as informações do produto a excluir e solicitando a confirmação do usuário:
Vendo detalhes de um produto
Para ver detalhes de um produto vamos definir o método Action Details(GET) no controlador ProdutosController:
// GET: Produtos/Details/5
public ActionResult Details(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Produto produto = db.Produtos.Find(id);
if (produto == null)
{
return HttpNotFound();
}
ViewBag.Categoria = db.Categorias.Find(produto.CategoriaId).CategoriaNome;
return View(produto);
}
|
A seguir crie a view Details.cshtml com o seguinte código :
@model Mvc_Imagem.Models.Produto
@{
ViewBag.Title = "Detalhes";
}
<h2>Detalhes do Produto</h2>
<hr />
<div>
<div class="form-horizontal">
<div class="form-group">
@Html.LabelFor(m => m.Nome, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.TextBoxFor(m => m.Nome,
new { @class = "form-control", @disabled = "disabled" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(m => m.Preco, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.TextBoxFor(m => m.Preco,
new { @class = "form-control", @disabled = "disabled" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(m => m.Categoria.CategoriaNome, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.TextBoxFor(m => m.CategoriaId, ((String)ViewBag.Categoria),
new { @class = "form-control", @disabled = "disabled" })
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<img src="@Model.Imagem" alt="@Model.Nome image" class="img-thumbnail" />
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
@Html.ActionLink("Retornar", "Index", null, new { @class = "btn btn-primary" })
</div>
</div>
</div>
</div
|
Executando o projeto e clicando no link Detalhes teremos o seguinte resultado:
Espiando o nosso banco de dados Estudo.mdf veremos as informações persistidas na tabela Produtos via Entity Framework conforme mostra a figura:
Note que as imagens estão armazenadas na pasta ProdutoImagens e somente o caminho é armazenado no banco de dados.
Pegue o código completo do projeto neste link : Mvc_Imagem.zip (sem as referências)
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a Objetos com VB .NET
ASP .NET MVC 4 - Criando sua primeira aplicação MVC - Macoratti
ASP .NET MVC - Criando uma aplicação básica - CRUD - Macoratti
ASP .NET MVC - Criando um simples formulário de login - Macoratti
ASP .NET MVC - Crud com Entity Framework usando ... - Macoratti
ASP .NET MVC 5 -Tratando imagens com o Helper ... - Macoratti.net
ASP .NET MVC 5 - Catálogo de Clientes com Foto e ... - Macoratti.net
ASP .NET - Exibindo imagens de um banco de dados - Macoratti.net