ASP 
.NET MVC 5 - Cadastro de Produtos (com imagem) - II
    
    
    ![]()  | 
    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 primeira parte do artigo e implementar a inclusão e a edição de produtos.

Recursos Usados:
Incluindo um novo produto
Para incluir um novo produto vamos definir os métodos Action Create(GET/POST) no controlador ProdutosController:
		       public ActionResult Create()
        {
            ViewBag.Categorias = db.Categorias;
            var model = new ProdutoViewModel();
            return View(model);
        }
		        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Create(ProdutoViewModel model)
        {
            var imageTypes = new string[]{
                    "image/gif",
                    "image/jpeg",
                    "image/pjpeg",
                    "image/png"
                };
            if (model.ImageUpload == null || model.ImageUpload.ContentLength == 0)
            {
                ModelState.AddModelError("ImageUpload", "Este campo é obrigatório");
            }
            else if (!imageTypes.Contains(model.ImageUpload.ContentType))
            {
                ModelState.AddModelError("ImageUpload", "Escolha uma iamgem GIF, JPG ou PNG.");
            }
		            if (ModelState.IsValid)
            {
                var produto = new Produto();
                produto.Nome = model.Nome;
                produto.Preco = model.Preco;
                produto.Descricao = model.Descricao;
                produto.CategoriaId = model.CategoriaId;
		                // Salvar a imagem para a pasta e pega o caminho
                var imagemNome = String.Format("{0:yyyyMMdd-HHmmssfff}", DateTime.Now);
                var extensao = System.IO.Path.GetExtension(model.ImageUpload.FileName).ToLower();
		                using (var img = System.Drawing.Image.FromStream(model.ImageUpload.InputStream))
                {
                    produto.Imagem = String.Format("/ProdutoImagens/{0}{1}", imagemNome, extensao);
                    // Salva imagem 
                    SalvarNaPasta(img, produto.Imagem);
                }
		                db.Produtos.Add(produto);
                db.SaveChanges();
                return RedirectToAction("Index");
            }
		            // Se ocorrer um erro retorna para pagina
            ViewBag.Categories = db.Categorias;
            return View(model);
        }
		 | 
	
O método Create(GET) apresenta a view Create onde o usuário informa os dados e a imagem do produto.
Observe que usamos o método SalvarNaPasta() para salvar a imagem enviada na pasta ProdutoImagens do projeto.
Abaixo temos o código deste método:
		        private void SalvarNaPasta(Image img, string caminho)
        {
            using (System.Drawing.Image novaImagem = new Bitmap(img))
            {
                novaImagem.Save(Server.MapPath(caminho), img.RawFormat);
            }
        }
		 | 
	
Nota: Podemos alterar o tamanho da imagem incluindo um método que faz esse serviço. No código projeto este método esta comentado.
Criando a view para incluir um produto
Clique com o botão direito sobre o método Action Create 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.ProdutoViewModel
		<h1>New Product</h1>
<hr />
@using (Html.BeginForm("Create", "Produtos",FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    @Html.AntiForgeryToken()
		<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", @placeholder = "Nome do produto" })
            @Html.ValidationMessageFor(m => m.Nome, "", new { @class = "text-danger" })
        </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", @placeholder = "Descrição do produto" })
            @Html.ValidationMessageFor(m => m.Descricao, "", new { @class = "text-danger" })
        </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", @placeholder = "Preço do produto" })
            @Html.ValidationMessageFor(m => m.Preco, "", new { @class = "text-danger" })
        </div>
    </div>
		    <div class="form-group">
        @Html.LabelFor(m => m.CategoriaId, new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.DropDownListFor(m => m.CategoriaId,
                               new SelectList(ViewBag.Categorias, "CategoriaId", "CategoriaNome"),
                               "Escolha a categoria", new { @class = "form-control" })
            @Html.ValidationMessageFor(m => m.CategoriaId, "", new { @class = "text-danger" })
        </div>
    </div>
		    <div class="form-group">
        @Html.LabelFor(m => m.ImageUpload, new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.TextBoxFor(m => m.ImageUpload, new { type = "file", @class = "form-control" })
            @Html.ValidationMessageFor(m => m.ImageUpload, "", new { @class = "text-danger" })
        </div>
    </div>
    <div class="form-group">
        <div class="col-md-offset-2 col-md-10">
            <input type="submit" value="Salvar Produto" class="btn btn-success" />
            @Html.ActionLink("Cancelar", "Index", null, new { @class = "btn btn-danger" })
        </div>
    </div>
</div>
}
<div>
</div>
@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}
		 | 
	
No código desta View usamos a view model ProdutoViewModel para inserir as informações do produto com sua imagem.
Executando o projeto iremos obter:
1- Após clicar no botão - Incluir Novo Produto - veremos página abaixo onde informamos os dados e imagem do novo produto:

2- Ao clicar no botão Salvar Produto veremos a lista de produtos com o novo produto:

Editando um produto
Para editar um produto vamos definir os métodos Action Edit(GET/POST) no controlador ProdutosController:
		       // GET: Produtos/Edit/5
        public ActionResult Edit(int? id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            Produto produto = db.Produtos.Find(id);
            if (produto == null)
            {
                return HttpNotFound();
            }
		            ViewBag.Categorias = db.Categorias;
            return View(produto);
        }
		        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Edit([Bind(Include = "ProdutoId,Nome,Preco,CategoriaId")] Produto model)
        {
            if (ModelState.IsValid)
            {
                var produto = db.Produtos.Find(model.ProdutoId);
                if (produto == null)
                {
                    return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
                }
                produto.Nome = model.Nome;
                produto.Preco = model.Preco;
                produto.CategoriaId = model.CategoriaId;
                db.SaveChanges();
                return RedirectToAction("Index");
            }
		            ViewBag.Categorias = db.Categorias;
            return View(model);
        }
		
  | 
	
Criando a view para editar um produto
Clique com o botão direito sobre o método Action Edit 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 
		@{ 
		<h1>Editar Produto</h1> 
		@using (Html.BeginForm()) <div class="form-horizontal"> @Html.HiddenFor(m => m.ProdutoId)     
		<div class="form-group">     
		<div class="form-group">     
		<div class="form-group">     
		<div class="form-group">     
		<div class="form-group"> 
		@section Scripts {  | 
	
Executando novamente o projeto e clicando no link para editar um produto teremos o seguinte resultado:
![]()  | 
	
Na próxima parte do artigo veremos como deletar e ver detalhes do produto.
'E o testemunho é 
este: que Deus nos deu a vida eterna; e esta vida está em seu Filho.(Jesus 
Cristo)'
1 João 5:11
| 
    
    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