A maior rede de estudos do Brasil

Grátis
244 pág.
Desenvolvimento Web - MVC

Pré-visualização | Página 23 de 41

2 public ActionResult Salva(Editora editora)
3 {
4 db.Editoras.Add(editora);
5 return View();
6 }
Código C# 7.16: EditoraController.cs
As propriedades dos objetos recebidos como argumentos nas ações dos controladores precisam
ter os mesmos nomes dos parâmetros HTTP ignorando-se letras maiúsculas ou minúsculas.
Exercícios de Fixação
1 Crie um projeto do tipo ASP.NET MVC 4 Web Application chamado CamadaDeControle no
Visual Studio 2012 Express for Web. Utilize o template Basic Project.
2 Adicione uma entidade chamada Produto na pasta Models do projeto CamadaDeControle.
1 namespace CamadaDeControle.Models
2 {
3 public class Produto
4 {
132 www.k19.com.br
133 CAMADA DE CONTROLE
5 [HiddenInput(DisplayValue=false)]
6 public int ProdutoID { get; set; }
7
8 [Display(Name="Nome do Produto")]
9 public string Nome { get; set; }
10
11 [DataType(DataType.MultilineText)]
12 [Display(Name="Descrição do Produto")]
13 public string Descricao { get; set; }
14
15 [Display(Name="Preço do Produto")]
16 public double Preco { get; set; }
17 }
18 }
Código C# 7.17: Produto.cs
3 Adicione um DbContext para registrar a entidade Produto e utilizar os recursos do Entity Fra-
mework. Crie uma classe chamada K19Context na pasta Models.
1 namespace CamadaDeControle.Models
2 {
3 public class K19Context : DbContext
4 {
5 public DbSet <Produto > Produtos { get; set; }
6 }
7 }
Código C# 7.18: K19Context.cs
4 Adicione um controlador chamado Produto utilizando o template Empty MVC Controller.
1 namespace CamadaDeControle.Controllers
2 {
3 public class ProdutoController : Controller
4 {
5 public ActionResult Lista()
6 {
7 K19Context ctx = new K19Context ();
8 return View(ctx.Produtos);
9 }
10
11 [HttpGet]
12 public ActionResult Cadastra ()
13 {
14 return View();
15 }
16
17 [HttpPost]
18 public ActionResult Cadastra(string nome , string descricao , double preco)
19 {
20 Produto p = new Produto
21 {
22 Nome = nome ,
23 Descricao = descricao ,
24 Preco = preco
25 };
26
27 K19Context ctx = new K19Context ();
28 ctx.Produtos.Add(p);
29 ctx.SaveChanges ();
30
31 return RedirectToAction("Lista");
32 }
www.facebook.com/k19treinamentos 133
CAMADA DE CONTROLE 134
33 }
34 }
Código C# 7.19: ProdutoController.cs
5 Adicione uma tela associada à ação Lista do controlador Produto com o seguinte conteúdo.
1 @using CamadaDeControle.Models
2 @model IEnumerable <Produto >
3
4 @{
5 ViewBag.Title = "Lista";
6 }
7
8 <h2>Lista</h2>
9
10 <table >
11 <tr>
12 <th>@Html.DisplayNameFor(m => m.Nome)</th>
13 <th>@Html.DisplayNameFor(m => m.Descricao)</th>
14 <th>@Html.DisplayNameFor(m => m.Preco)</th>
15 </tr>
16 @foreach(var produto in Model)
17 {
18 <tr>
19 <td>@Html.DisplayFor(m => produto.Nome)</td>
20 <td>@Html.DisplayFor(m => produto.Descricao)</td>
21 <td>@Html.DisplayFor(m => produto.Preco)</td>
22 </tr>
23 }
24 </table >
Código HTML 7.1: Lista.cshtml
6 Adicione uma tela associada à ação Cadastra do controlador Produto com o seguinte conteúdo.
1 @model CamadaDeControle.Models.Produto
2
3 @{
4 ViewBag.Title = "Cadastra";
5 }
6
7 <h2>Cadastra </h2>
8
9 @using (Html.BeginForm ())
10 {
11 @Html.EditorFor(m => m.ProdutoID)
12 <div>@Html.LabelFor(m => m.Nome)</div>
13 @Html.EditorFor(m => m.Nome)
14 <div>@Html.LabelFor(m => m.Descricao)</div>
15 @Html.EditorFor(m => m.Descricao)
16 <div>@Html.LabelFor(m => m.Preco)</div>
17 @Html.EditorFor(m => m.Preco)
18
19 <div><input type="submit" value="Cadastrar" /></div>
20 }
Código HTML 7.2: Cadastra.cshtml
Para ver o resultado, acesse a url http://localhost:<PORTA_APP>/Produto/Cadastra.
134 www.k19.com.br
135 CAMADA DE CONTROLE
7 Altere a ação Cadastra do controlador Produto.
1 namespace CamadaDeControle.Controllers
2 {
3 public class ProdutoController : Controller
4 {
5 public ActionResult Lista()
6 {
7 K19Context ctx = new K19Context ();
8 return View(ctx.Produtos);
9 }
10
11 [HttpGet]
12 public ActionResult Cadastra ()
13 {
14 return View();
15 }
16
17 [HttpPost]
18 public ActionResult Cadastra(Produto p)
19 {
20 K19Context ctx = new K19Context ();
21 ctx.Produtos.Add(p);
22 ctx.SaveChanges ();
23
24 return RedirectToAction("Lista");
25 }
26 }
27 }
Código C# 7.20: ProdutoController.cs
Para testar, acesse a url http://localhost:<PORTA_APP>/Produto/Cadastra.
TempData
Ao efetuar um redirecionamento, uma nova requisição é realizada pelo navegador. Nesta nova
requisição, não temos mais acesso aos dados e objetos da requisição anterior ao redirecionamento.
Caso haja a necessidade de preservar dados ao longo do redirecionamento, podemos utilizar a pro-
priedade TempData.
Por exemplo, ao cadastrar uma editora, podemos efetuar um redirecionamento para a tela de
listagem de editoras. Na propriedade TempData, podemos acrescentar uma mensagem indicando o
eventual sucesso da operação. Veja o exemplo abaixo.
1 ...
2 [HttpPost]
3 public ActionResult Salva(Editora editora)
4 {
5 db.Editoras.Add(editora);
6 db.SaveChanges ();
7 TempData["Mensagem"] = "Editora cadastrada com sucesso!";
8 return RedirectToAction("Index");
9 }
10 ...
Código C# 7.21: EditoraController.cs
Na camada de apresentação, podemos recuperar os dados armazenados na propriedade TempData.
Veja o código a seguir:
www.facebook.com/k19treinamentos 135
CAMADA DE CONTROLE 136
1 @if (TempData["Mensagem"] != null)
2 {
3 <p>@TempData["Mensagem"]</p>
4 }
Código CSHTML 7.2: Recuperando dados armazenados na propriedade TempData
Exercícios de Fixação
8 Altere a ação Cadastra do controlador Produto.
1 ...
2 public ActionResult Cadastra(Produto p)
3 {
4 K19Context ctx = new K19Context ();
5 ctx.Produtos.Add(p);
6 ctx.SaveChanges ();
7
8 ViewBag.Mensagem = "Produto cadastrado com sucesso!";
9
10 return RedirectToAction("Lista");
11 }
12 ...
Código C# 7.22: ProdutoController.cs
9 Modifique o arquivo Lista.cshtml da pasta Views/Produto.
1 @using CamadaDeControle.Models
2 @model IEnumerable <Produto >
3
4 @{
5 ViewBag.Title = "Lista";
6 }
7
8 <h2>Lista</h2>
9
10 @if (ViewBag.Mensagem != null)
11 {
12 <div>@ViewBag.Mensagem </div>
13 }
14
15 <table >
16 <tr>
17 <th>@Html.DisplayNameFor(m => m.Nome)</th>
18 <th>@Html.DisplayNameFor(m => m.Descricao)</th>
19 <th>@Html.DisplayNameFor(m => m.Preco)</th>
20 </tr>
21 @foreach(var produto in Model)
22 {
23 <tr>
24 <td>@Html.DisplayFor(m => produto.Nome)</td>
25 <td>@Html.DisplayFor(m => produto.Descricao)</td>
26 <td>@Html.DisplayFor(m => produto.Preco)</td>
27 </tr>
28 }
29 </table >
Código CSHTML 7.3: Lista.cshtml
136 www.k19.com.br
137 CAMADA DE CONTROLE
Teste a aplicação acessando a url http://localhost:<PORTA_APP>/Produto/Cadastra. Verifi-
que que a mensagem de sucesso não aparecerá.
10 Altere novamente a ação Cadastra do controlador Produto.
1 ...
2 public ActionResult Cadastra(Produto p)
3 {
4 K19Context ctx = new K19Context ();
5 ctx.Produtos.Add(p);
6 ctx.SaveChanges ();
7
8 TempData["Mensagem"] = "Produto cadastrado com sucesso!";
9
10 return RedirectToAction("Lista");
11 }
12 ...
Código C# 7.23: ProdutoController.cs
11 Modifique o arquivo Lista.cshtml da pasta Views/Produto.
1 @using CamadaDeControle.Models
2 @model IEnumerable <Produto >
3
4 @{
5 ViewBag.Title = "Lista";
6 }
7
8 <h2>Lista</h2>
9
10 @if (TempData["Mensagem"] != null)
11 {
12 <div>@TempData["Mensagem"]</div>
13 }
14
15 <table >
16 <tr>
17 <th>@Html.DisplayNameFor(m => m.Nome)</th>
18 <th>@Html.DisplayNameFor(m => m.Descricao)</th>
19 <th>@Html.DisplayNameFor(m => m.Preco)</th>
20 </tr>
21 @foreach(var produto in Model)
22 {
23 <tr>
24 <td>@Html.DisplayFor(m => produto.Nome)</td>
25 <td>@Html.DisplayFor(m => produto.Descricao)</td>
26 <td>@Html.DisplayFor(m => produto.Preco)</td>
27 </tr>
28 }
29 </table >
Código CSHTML 7.4: Lista.cshtml
Teste a aplicação