Buscar

unid_4

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 41 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 41 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 41 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

78
Re
vi
sã
o:
 G
io
va
nn
a 
/ R
os
e 
- 
Di
ag
ra
m
aç
ão
: M
ár
ci
o 
- 
06
/0
8/
20
15
Unidade IV
Unidade IV
Esta unidade pretende apresentar conceitos de aplicações web utilizando particionamento de código, 
bem como apresentação de estilo de trabalho em camadas.
7 Uso de roteamento de solUções mVC
MVC (Model→View→Controller) pode ser considerado um pattern de arquitetura para o 
desenvolvimento de aplicações web. Ele pode estabelecer a segregação de três camadas: Model, View e 
Controller – sendo que pode considerar que a camada Model corresponde a dados e regras determinadas 
para a manipulação de todos os itens. Todas as estruturas são manipuladas inicialmente por Controllers, 
servindo, assim, como base para a implementação e apresentação de dados pela camada View.
 lembrete
O estudo de diagramação UML, bem como diagrama de sequência, 
agregam no entendimento do conceito de aplicação MVC, pois são recursos 
que se complementam na análise e desenvolvimento de aplicações em 
camadas web.
A camada Controller tem for finalidade tratar todas as requisições, sendo, assim, efetuada por meio 
de métodos declarados na mesma classe Controller. E, por fim, a camada View tem objetiva centralizar 
todas as ações e apresenta‑las dentro da página .aspx.
 saiba mais
Recomendamos ao aluno a leitura do artigo a seguir:
GROFFE, R. J. ASP.NET MVC: Desenvolvendo soluções para 
web. DevMedia, Rio de Janeiro, [s.d.]. Disponível em: <http://www.
devmedia.com.br/asp‑net‑mvc‑desenvolvendo‑solucoes‑para‑web‑ 
revista‑net‑magazine‑91/22878>. Acesso em: 12 jul. 2015.
A arquitetura de três camadas também pode ser estudada como uma solicitação enviada 
ao servidor na qual a interface com o cliente efetua processos de regras de negócio a fim de 
armazenar dados que são desenvolvidos e armazenados de maneira independente, ou até mesmo 
em plataformas separadas.
79
Re
vi
sã
o:
 G
io
va
nn
a 
/ R
os
e 
- 
Di
ag
ra
m
aç
ão
: M
ár
ci
o 
- 
06
/0
8/
20
15
Desenvolvimento De software para internet
Camada de Apresentação
ASP.NET Web Forms
ASP.NET Web Users Controls
ASP.NET Master Pages
Camada de Negócio
Classes C# VB .NET
Camada de Acesso de Dados
Stored Procedures
Banco de 
Dados SQL 
Server
Figura 82 – Fluxo de trabalho em camadas
Pode‑se entender todo o fluxo da seguinte maneira:
•	 A	camada	de	apresentação	apresenta	elementos	da	interface	do	cliente	do	site e encapsula toda 
a estrutura lógica que inclui desde interação até integração de cliente e regras de negócio.
•	 A	camada	de	controle,	também	conhecida	como	camada	de	negócio,	retorna	ao	cliente	o	resultado	
de toda a regra de negócio encapsulada na classe (C#).
•	 A	camada	de	acesso	a	dados	detém	todos	os	métodos	e	conexões	inseridas,	que	retornam	para	a	
camada de negócio toda a execução efetuada em banco de dados, feita em classe (C#).
 observação
Para o desenvolvimento de todas as classes (sejam de controle ou de 
acesso a dados ou modelo), recomendamos a utilização de classes C#.
80
Re
vi
sã
o:
 G
io
va
nn
a 
/ R
os
e 
- 
Di
ag
ra
m
aç
ão
: M
ár
ci
o 
- 
06
/0
8/
20
15
Unidade IV
Figura 83 – Exemplo de aplicação MVC
Figura 84 – Identificação de projeto MVC no Visual Studio .NET
Figura 85 – Escolha de Template dentro do Visual Studio
81
Re
vi
sã
o:
 G
io
va
nn
a 
/ R
os
e 
- 
Di
ag
ra
m
aç
ão
: M
ár
ci
o 
- 
06
/0
8/
20
15
Desenvolvimento De software para internet
Após a seleção do Template, será criado o projeto utilizando a arquitetura ASP.NET MVC.
Atualmente, mais de 80% dos projetos são desenvolvidos utilizando a arquitetura MVC, 
visto a segregação de código e principalmente o paralelismo que é feito com a parte de análise 
do projeto.
O conceito de MVC vem de encontro com alguns diagramas da UML (tais como o Diagrama de 
Caso de Uso, Sequência e Classe) que são de extrema importância para o desenvolvimento de qualquer 
aplicação nos dias atuais.
 observação
O autor recomenda o estudo de diagramas UML, tais como o diagrama 
de caso de uso e o diagrama de sequência, classe e atividade, que serão a 
base de todo o desenvolvimento web efetuado nesse livro‑texto.
7.1 razor
O Razor agrega uma série de características importantes, que possibilitam, por intermédio 
de um objetivo natural, a construção de páginas com a estrutura de ASP. NET MVC, porém 
essa ideia nasceu a partir da versão 3. Uma das características importantes construídas no 
Razor é que ele foi desenvolvido para ser expressivo, compacto e ágil: a ideia foi construir um 
mecanismo capaz de reduzir ao máximo o número de caracteres necessários para a codificação 
de uma página aspx.
View Engine Default
O View Engine Default do ASP. NET (aspx), é conhecido por possuir uma sintaxe 
muito próxima com a do HTML, com abertura e fechamento de tags em páginas aspx. 
No Razor não conseguimos identificar esse item, reduzindo, portanto a quantidade 
de texto necessário para a codificação de itens contidos em controle, ou “parte” da 
página aspx.
Tratando exclusivamente da redução significativa de caracteres, do ponto de vista do 
programador da página aspx, todo o processo passa a ficar muito mais eficaz, o que significa 
que se perde menos tempo na codificação das páginas aspx. Ao contrário da maioria dos 
View Engines, com o Razor não é necessário ficar desenvolvendo abertura e fechamento dos 
blocos de código. O parser do Razor é inteligente e capaz de separar o que é código HTML 
do código C# ou VB.NET, por exemplo.
Todo esse universo garante um código eficaz e limpo, facilitando não só a sua escrita 
inicial, mas também deixando de fácil a manutenção posterior nessas páginas aspx.
82
Re
vi
sã
o:
 G
io
va
nn
a 
/ R
os
e 
- 
Di
ag
ra
m
aç
ão
: M
ár
ci
o 
- 
06
/0
8/
20
15
Unidade IV
Outra característica muito importante do Razor é a sua facilidade de aprendizagem. 
Como ele podemos considerar como um dos pontos a sua composição de HTML e C# (ou 
vb.net), qualquer programador .NET com conhecimento básico em HTML, conseguirá com 
grande facilidade capturar a estrutura do Razor, e em pouco tempo estará com conhecimento 
a escrever páginas aspx com o novo Template.
Provavelmente outro ponto importante do Razor é o fato de ele não ser uma “nova 
linguagem”, ou seja, ao contrário de todos os View Engines existentes, o Razor faz 
utilização de sua própria linguagem C#/VB, o que torna sua aderência ainda mais 
efetiva e eficaz.
Considerando também que o Razor não depende exclusivamente de nenhuma 
ferramenta para ser escrito, ou seja, não dependeria também do Visual Studio. É possível 
desenvolver páginas com Razor em qualquer editor de texto, até mesmo no Notepad, caso 
seja necessário utilizar essa ferramenta para tal desenvolvimento.
Levando‑se em consideração também que ao escolher utilizar o Razor no Visual Studio 
o programador consegue ganhar todos os recursos de intelissense e statement completion 
(recurso que “completa” palavras do código que podem ser automaticamente identificadas). 
Pensando claro que com esses recursos o processo de desenvolvimento de páginas se torna 
ainda mais rápido e eficiente.
Outro ponto interessante do Razor, é que ele é totalmente amigável para efetuar testes, 
trabalhando se com testes unitários. Com o Razor é possível criar testes unitários para 
verificação das Views da aplicação web, sem que haja necessidade de conhecer o Controller 
que renderiza a View e vice‑versa.
Sendo assim, para atender a todas essas necessidades que a equipe do ASP.NET inseriu 
o Razor no ASP.NET MVC 3. E mesmo assim, ele passa a ser apenas mais uma escolha que é 
necessária fazer ao criar as Views de uma aplicação Web. A View Engine default do ASP.NET 
sempre estará funcionando e sendo uma grande opção.
Adaptado de: Sendin ([s.d.]b).
83
Re
vi
sã
o:
 G
io
va
nn
a 
/ R
os
e 
- 
Di
ag
ra
m
aç
ão
: M
ár
ci
o 
- 
06
/0
8/
20
15
Desenvolvimento De software para internet
8 desenVolVimento de apliCações mVC
As imagens apresentadas a seguir sãoconcebidas por meio de desenvolvimento MVC.
Figura 86 – Página default construída com Template MVC
Figura 87 – Classe Model
84
Re
vi
sã
o:
 G
io
va
nn
a 
/ R
os
e 
- 
Di
ag
ra
m
aç
ão
: M
ár
ci
o 
- 
06
/0
8/
20
15
Unidade IV
using System; 
using System.ComponentModel; 
using System.ComponentModel.DataAnnotations; 
 
namespace PrimeiraAPP_MVC4.Models 
{ 
 public class UsuarioModel 
 { 
 [DisplayName(“Primeiro Nome”)] 
 [StringLength(50, ErrorMessage = “O campo Nome permite no 
máximo 50 caracteres!”)] 
 public string nome { get; set; } 
 [Required] 
 public string sobrenome { get; set; } 
 public string endereco { get; set; } 
 [StringLength (50)] 
 [Required(ErrorMessage=”Informe o Email”)] 
 [RegularExpression(@”\w+([‑+.’]\w+)*@\w+([‑.]\w+)*\.\w+([‑.]\
w+)*”, ErrorMessage = “Email inválido.”)] 
 public string email { get; set; } 
 [DataType(DataType.Date)] 
 public DateTime nascimento { get; set; } 
 } 
}
Figura 88 – Classe Model Usuário
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
 
namespace PrimeiraAPP_MVC4.Models 
{ 
 public class Usuarios 
 { 
 public List<UsuarioModel> listaUsuarios = new 
List<UsuarioModel>(); 
 
 public Usuarios() 
 { 
 listaUsuarios.Add(new UsuarioModel 
 { 
 nome = “Prof. Salatiel”, 
 sobrenome = “Marinho”, 
 endereco = “Rua Máximo Morante, 110”, 
 email = “profsalatielmarinh@gmail.com”, 
 nascimento = Convert.ToDateTime(“29/10/1982”) 
 }); 
 listaUsuarios.Add(new UsuarioModel 
 { 
 nome = “Andre Ricardo”, 
 sobrenome = “Marinho”, 
 endereco = “Rua Engenheiro Garcia, 50”,
85
Re
vi
sã
o:
 G
io
va
nn
a 
/ R
os
e 
- 
Di
ag
ra
m
aç
ão
: M
ár
ci
o 
- 
06
/0
8/
20
15
Desenvolvimento De software para internet
 email = “andrerick@gmail.com”, 
 nascimento = Convert.ToDateTime(“15/10/1932”) 
 }); 
 listaUsuarios.Add(new UsuarioModel 
 { 
 nome = “Jonas Lima”, 
 sobrenome = “Marques”, 
 endereco = “Rua Bartolomeu Cândia, 10”, 
 email = “jonaslimamarques@gmaill.com”, 
 nascimento = Convert.ToDateTime(“12/12/1987”) 
 }); 
 } 
 public void CriaUsuario(UsuarioModel usuarioModelo) 
 { 
 listaUsuarios.Add(usuarioModelo); 
 } 
 
 public void AtualizaUsuario(UsuarioModel usuarioModelo) 
 { 
 foreach (UsuarioModel usuario in listaUsuarios) 
 { 
 if (usuario.email == usuarioModelo.email) 
 { 
 listaUsuarios.Remove(usuario); 
 listaUsuarios.Add(usuarioModelo); 
 break; 
 } 
 } 
 }
 public UsuarioModel GetUsuario(string Email) 
 { 
 UsuarioModel _usuarioModel = null; 
 
 foreach (UsuarioModel _usuario in listaUsuarios) 
 if (_usuario.email == Email) 
 _usuarioModel = _usuario; 
 
 return _usuarioModel; 
 }
 public void DeletarUsuario(String Email) 
 { 
 foreach (UsuarioModel _usuario in listaUsuarios) 
 { 
 if (_usuario.email == Email) 
 { 
 listaUsuarios.Remove(_usuario); 
 
 break; 
 } 
 } 
 } 
 } 
}
Figura 89 – Implementação de Classes de persistência
86
Re
vi
sã
o:
 G
io
va
nn
a 
/ R
os
e 
- 
Di
ag
ra
m
aç
ão
: M
ár
ci
o 
- 
06
/0
8/
20
15
Unidade IV
using System.Web.Mvc; 
using PrimeiraAPP_MVC4.Models; 
 
namespace PrimeiraAPP_MVC4.Controllers 
{ 
 public class UsuarioController : Controller 
 { 
 // 
 // GET: /Usuario/ 
 
 private static Usuarios _usuarios = new Usuarios(); 
 
 public ActionResult Index() 
 { 
 return View( _usuarios.listaUsuarios); 
 } 
 
 public ActionResult AdicionaUsuario() 
 { 
 return View(); 
 } 
 
 [HttpPost] 
 public ActionResult AdicionaUsuario(UsuarioModel _
usuarioModel) 
 { 
 _usuarios.CriaUsuario(_usuarioModel); 
 return View(); 
 }
 public ViewResult DeletaUsuario(string id) 
 { 
 return View(_usuarios.GetUsuario(id)); 
 
 } 
 
 [HttpPost] 
 public RedirectToRouteResult DeletaUsuario(string id, 
FormCollection collection) 
 { 
 _usuarios.DeletarUsuario(id); 
 return RedirectToAction(“Index”); 
 } 
 } 
}
Figura 90 – Implementação da Classe Controller
87
Re
vi
sã
o:
 G
io
va
nn
a 
/ R
os
e 
- 
Di
ag
ra
m
aç
ão
: M
ár
ci
o 
- 
06
/0
8/
20
15
Desenvolvimento De software para internet
@model IEnumerable<PrimeiraAPP_MVC4.Models.UsuarioModel> 
@{ 
 ViewBag.Title = “Index”; 
} 
<h2>Index</h2> 
<p> 
 @Html.ActionLink(“Criar Usuário”, “AdicionaUsuario”) 
</p> 
<table> 
 <tr> 
 <th>@Html.DisplayNameFor(model => model.nome)</th> 
 <th>@Html.DisplayNameFor(model => model.sobrenome)</th> 
 <th>@Html.DisplayNameFor(model => model.endereco)</th> 
 <th>@Html.DisplayNameFor(model => model.email)</th> 
 <th>@Html.DisplayNameFor(model => model.nascimento)</th> 
 <th></th> 
 </tr> 
@foreach (var item in Model) { 
 <tr> 
 <td>@Html.DisplayFor(modelItem => item.nome)</td> 
 <td>@Html.DisplayFor(modelItem => item.sobrenome)</td> 
 <td>@Html.DisplayFor(modelItem => item.endereco)</td> 
 <td>@Html.DisplayFor(modelItem => item.email)</td> 
 <td>@Html.DisplayFor(modelItem => item.nascimento)</td> 
 <td> 
 @Html.ActionLink(“Edit”, “Edit”, new { /* id=item.
PrimaryKey */ }) | 
 @Html.ActionLink(“Details”, “Details”, new { /* id=item.
PrimaryKey */ }) | 
 @Html.ActionLink(“Deletar”, “DeletaUsuario”, new { 
id=item.email }) 
 </td> 
 </tr> 
} 
</table>
Figura 91 – Implementação do código na página aspx
@model PrimeiraAPP_MVC4.Models.UsuarioModel 
@{ 
 ViewBag.Title = “AdicionaUsuario”; 
} 
<h2>AdicionaUsuario</h2> 
 
@using (Html.BeginForm()) { 
 @Html.ValidationSummary(true) 
    <fieldset> 
 <legend>UsuarioModel</legend> 
 
 <div class=”editor‑label”>@Html.LabelFor(model => model.
nome)</div> 
        <div class=”editor‑field”>@Html.EditorFor(model => model.nome) 
 @Html.ValidationMessageFor(model 
=> model.nome)
88
Re
vi
sã
o:
 G
io
va
nn
a 
/ R
os
e 
- 
Di
ag
ra
m
aç
ão
: M
ár
ci
o 
- 
06
/0
8/
20
15
Unidade IV
 </div> 
 
 <div class=”editor‑label”>@Html.LabelFor(model => model.
sobrenome)</div> 
        <div class=”editor‑field”> 
 @Html.EditorFor(model => model.sobrenome) 
 @Html.ValidationMessageFor(model => model.sobrenome) 
 </div> 
 
 <div class=”editor‑label”>@Html.LabelFor(model => model.
endereco)</div> 
        <div class=”editor‑field”> 
 @Html.EditorFor(model => model.endereco) 
 @Html.ValidationMessageFor(model => model.endereco) 
 </div> 
 
 <div class=”editor‑label”>@Html.LabelFor(model => model.
email)</div> 
        <div class=”editor‑field”> 
 @Html.EditorFor(model => model.email) 
 @Html.ValidationMessageFor(model => model.email) 
 </div> 
 
 <div class=”editor‑label”>@Html.LabelFor(model => model.
nascimento)</div> 
        <div class=”editor‑field”> 
 @Html.EditorFor(model => model.nascimento) 
 @Html.ValidationMessageFor(model => model.nascimento) 
 </div> 
 <p><input type=”submit” value=”Create” /> 
 </p> 
    </fieldset> 
} 
<div> 
 @Html.ActionLink(“Back to List”, “Index”) 
</div> 
@section Scripts { 
 @Scripts.Render(“~/bundles/jqueryval”) 
}
Figura 92 – Implementação do código na página aspx
 saiba mais
Com o passar do tempo, muitos desenvolvedores migram aplicações 
WebForm para aplicação em camadas (MVC), um conceito que a cada dia 
ganha mais força pelo desenvolvimento, distribuição e manutenção do 
código. Para conhecer um pouco mais sobre MVC, leia:
89
Re
vi
sã
o:
 G
io
va
nn
a 
/ R
os
e 
- 
Di
ag
ra
m
aç
ão
: M
ár
ci
o 
- 
06
/0
8/
20
15
Desenvolvimento De software para internet
SENDIN, R. ASP.NET: WebForms X MVC. DevMedia, Rio de 
Janeiro, [s.d.]. Disponível em: <http://www.devmedia.com.br/
artigo‑net‑magazine‑65‑asp‑net‑webforms‑x‑mvc/13896>. Acesso em: 5 
ago. 2015
8.1 acessando dados com ms ado.net
Existem atualmente diversas maneiras de conexão com o banco de dados: Oracle, SQL, Access, entre 
outros, porém, para que a conexão seja efetuada de maneira amigável, nesse livro‑texto teremos como 
base a construção de conexão utilizando a linguagem C#, que será utilizada como ponto entre a view 
(aspx) e a codificação de itens de conexão (C#).
 observação
É importante que o aluno consiga assimilar tendo estudado conceitos 
vistos em banco de dados para que esse livro‑texto possa ser absorvido de 
maneira clara e objetiva.
A seguir inserimos uma sequência de imagens que exemplifica como elaborar a aplicação em três 
camadas.
Figura 93 – Exemplo de aplicação em 3 camadas
<%@ Page Title=”Home Page” Language=”C#” MasterPageFile=”~/Site.
master” AutoEventWireup=”true” 
 CodeBehind=”Default.aspx.cs” Inherits=”TresCamadasAdoNet._
Default” %> 
 
<asp:Content ID=”HeaderContent” runat=”server” ContentPlaceHolderID=
”HeadContent”> 
</asp:Content> 
<asp:Content ID=”BodyContent” runat=”server” ContentPlaceHolderID=”M
ainContent”> 
 <h2> 
 Exemplo de aplicação em 3 Camadas 
 </h2> 
 <p>
90
Re
vi
sã
o:
 G
io
va
nn
a 
/ R
os
e 
- 
Di
ag
ra
m
aç
ão
: M
ár
ci
o 
- 
06
/0
8/
20
15
Unidade IV
 <asp:HyperLink ID=”hplkListarRegistros” runat=”server” 
 NavigateUrl=”~/ListarRegistros.aspx”>Listar Registros</
asp:HyperLink> 
 </p> 
 <asp:Label ID=”lblMessage” runat=”Server” ForeColor=”red” 
EnableViewState=”False”></asp:Label> 
 <table style=”border:2px solid #cccccc;”> 
 <tr style=”background‑color:#507CD1;color:White;”> 
 <th colspan=”3”>Incluir Registros</th> 
 </tr> 
 <tr> 
 <td> 
 Nome: 
 </td> 
 <td> 
 <asp:TextBox ID=”txtNome” runat=”Server” 
Width=”227px”></asp:TextBox> 
 </td> 
 <td> 
 <asp:RequiredFieldValidator ID=”req1” 
runat=”Server” Text=”*” ControlToValidate=”txtNome” 
 Display=”dynamic”></
asp:RequiredFieldValidator> 
 </td> 
 </tr> 
 <tr> 
 <td> 
 Email: 
 </td> 
 <td> 
 <asp:TextBox ID=”txtEmail” runat=”Server” 
Width=”223px”></asp:TextBox> 
 </td> 
 <td> 
 <asp:RequiredFieldValidator ID=”req2” 
runat=”Server” Text=”*” ControlToValidate=”txtEmail” 
 Display=”dynamic”></asp:RequiredFieldValidator> 
 </td> 
 </tr> 
 <tr> 
 <td> 
 Idade: 
 </td> 
 <td> 
 <asp:TextBox ID=”txtIdade” runat=”Server” 
Columns=”4” Width=”42px”></asp:TextBox> 
 </td> 
 <td> 
 <asp:RequiredFieldValidator ID=”req3” 
runat=”Server” Text=”*” ControlToValidate=”txtIdade” 
 Display=”dynamic”></
asp:RequiredFieldValidator> 
 <asp:CompareValidator ID=”Comp1” runat=”Server” 
Text=”Somente Inteiros” ControlToValidate=”txtIdade” 
 Operator=”DataTypeCheck” Type=”Integer”></
91
Re
vi
sã
o:
 G
io
va
nn
a 
/ R
os
e 
- 
Di
ag
ra
m
aç
ão
: M
ár
ci
o 
- 
06
/0
8/
20
15
Desenvolvimento De software para internet
asp:CompareValidator> 
 </td> 
 </tr> 
 <tr> 
 <td>&nbsp;</td> 
 <td> 
 <asp:Button ID=”btnSubmit” runat=”server” 
Text=”Submeter” OnClick=”IncluirRegistros” 
 Width=”80px” /> 
 </td> 
 </tr> 
 </table> 
</asp:Content>
Figura 94 – Estrutura de código da página
Figura 95 – Estrutura do Projeto Web
92
Re
vi
sã
o:
 G
io
va
nn
a 
/ R
os
e 
- 
Di
ag
ra
m
aç
ão
: M
ár
ci
o 
- 
06
/0
8/
20
15
Unidade IV
using System.Data; 
using DAL; 
 
namespace BAL 
{ 
 public class Negocios 
 { 
 
 /// <summary> 
 /// inserir registro no banco de dados 
 /// </summary> 
 /// <param name=”nome”></param> 
 /// <param name=”email”></param> 
 /// <param name=”idade”></param> 
 /// <returns></returns> 
 public int Insert(string nome, string email, int idade) 
 { 
 AcessoDados pDAL = new AcessoDados(); 
 try 
 { 
 return pDAL.Insert(nome, email, idade); 
 } 
 catch 
 { 
 throw; 
 } 
 finally 
 { 
 pDAL = null; 
 } 
 } 
 
 /// <summary> 
 /// atualizar registro do banco de dados 
 /// </summary> 
 /// <param name=”codigo”></param> 
 /// <param name=”nome”></param> 
 /// <param name=”email”></param> 
 /// <param name=”idade”></param> 
 /// <returns></returns> 
 public int Update(int codigo, string nome, string email, int 
idade) 
 { 
 AcessoDados pDAL = new AcessoDados(); 
 try 
 { 
 return pDAL.Update(codigo, nome, email, idade); 
 } 
 catch 
 { 
 throw; 
 } 
 finally 
 { 
 pDAL = null;
93
Re
vi
sã
o:
 G
io
va
nn
a 
/ R
os
e 
- 
Di
ag
ra
m
aç
ão
: M
ár
ci
o 
- 
06
/0
8/
20
15
Desenvolvimento De software para internet
 } 
 } 
 
 /// <summary> 
 /// carregar todos os registros 
 /// </summary> 
 /// <returns></returns> 
 public DataTable Load() 
 { 
 AcessoDados pDAL = new AcessoDados(); 
 try 
 { 
 return pDAL.Load(); 
 } 
 catch 
 { 
 throw; 
 } 
 finally 
 { 
 pDAL = null; 
 } 
 } 
 
 /// <summary> 
 /// Deletar registro do banco de dados 
 /// </summary> 
 /// <param name=”codigo”></param> 
 /// <returns></returns> 
 public int Delete(int codigo) 
 { 
 AcessoDados pDAL = new AcessoDados(); 
 try 
 { 
 return pDAL.Delete(codigo); 
 } 
 catch 
 { 
 throw; 
 } 
 finally 
 { 
 pDAL = null; 
 } 
 } 
 } 
}
Figura 96 – Desenvolvimento efetuado na classe BAL
94
Re
vi
sã
o:
 G
io
va
nn
a 
/ R
os
e 
- 
Di
ag
ra
m
aç
ão
: M
ár
ci
o 
- 
06
/0
8/
20
15
Unidade IV
using System.Data.SqlClient; 
using System.Data; 
using System.Configuration; 
 
namespace DAL 
{ 
 public class AcessoDados 
 { 
 
 /// <summary> 
 /// inserir registros no banco de dados 
 /// </summary> 
 /// <param name=”nome”></param> 
 /// <param name=”email”></param> 
 /// <param name=”idade”></param>/// <returns></returns> 
 /// 
 string connStr = ConfigurationManager.ConnectionStrings[“Esco
laSqlServer”].ConnectionString; 
 
 public int Insert(string nome, string email, int idade) 
 { 
 SqlConnection conn = new SqlConnection(connStr); 
 conn.Open(); 
 SqlCommand dCmd = new SqlCommand(“InserirDados”, conn); 
 dCmd.CommandType = CommandType.StoredProcedure; 
 try 
 { 
 dCmd.Parameters.AddWithValue(“@nome”, nome); 
 dCmd.Parameters.AddWithValue(“@email”, email); 
 dCmd.Parameters.AddWithValue(“@idade”, idade); 
 return dCmd.ExecuteNonQuery(); 
 } 
 catch 
 { 
 throw; 
 } 
 finally 
 { 
 dCmd.Dispose(); 
 conn.Close(); 
 conn.Dispose(); 
 } 
 } 
 
 
 /// <summary> 
 /// atualiza registro do banco de dados 
 /// </summary> 
 /// <param name=”codigo”></param> 
 /// <param name=”nome”></param> 
 /// <param name=”email”></param> 
 /// <param name=”idade”></param> 
 /// <returns></returns>
95
Re
vi
sã
o:
 G
io
va
nn
a 
/ R
os
e 
- 
Di
ag
ra
m
aç
ão
: M
ár
ci
o 
- 
06
/0
8/
20
15
Desenvolvimento De software para internet
 public int Update(int codigo, string nome, string email, int 
idade) 
 { 
 SqlConnection conn = new SqlConnection(connStr); 
 conn.Open(); 
 SqlCommand dCmd = new SqlCommand(“AtualizarDados”, conn); 
 dCmd.CommandType = CommandType.StoredProcedure; 
 try 
 { 
 dCmd.Parameters.AddWithValue(“@nome”, nome); 
 dCmd.Parameters.AddWithValue(“@email”, email); 
 dCmd.Parameters.AddWithValue(“@idade”, idade); 
 dCmd.Parameters.AddWithValue(“@codigo”, codigo); 
 return dCmd.ExecuteNonQuery(); 
 } 
 catch 
 { 
 throw; 
 } 
 finally 
 { 
 dCmd.Dispose(); 
 conn.Close(); 
 conn.Dispose(); 
 } 
 } 
 
 /// <summary> 
 /// carrega todos os registros do banco de dados 
 /// </summary> 
 /// <returns></returns> 
 public DataTable Load() 
 { 
 SqlConnection conn = new SqlConnection(connStr); 
 SqlDataAdapter dAd = new SqlDataAdapter(“CarregarDados”, 
conn); 
 dAd.SelectCommand.CommandType = CommandType.
StoredProcedure; 
 DataSet dSet = new DataSet(); 
 try 
 { 
 dAd.Fill(dSet, “Contatos”); 
 return dSet.Tables[“Contatos”]; 
 } 
 catch 
 { 
 throw; 
 } 
 finally 
 { 
 dSet.Dispose(); 
 dAd.Dispose(); 
 conn.Close(); 
 conn.Dispose(); 
 }
96
Re
vi
sã
o:
 G
io
va
nn
a 
/ R
os
e 
- 
Di
ag
ra
m
aç
ão
: M
ár
ci
o 
- 
06
/0
8/
20
15
Unidade IV
 } 
 
 /// <summary> 
 /// Exclui o registro do banco de dados 
 /// </summary> 
 /// <param name=”codigo”></param> 
 /// <returns></returns> 
 public int Delete(int codigo) 
 { 
 SqlConnection conn = new SqlConnection(connStr); 
 conn.Open(); 
 SqlCommand dCmd = new SqlCommand(“DeletarDados”, conn); 
 dCmd.CommandType = CommandType.StoredProcedure; 
 try 
 { 
 dCmd.Parameters.AddWithValue(“@codigo”, codigo); 
 return dCmd.ExecuteNonQuery(); 
 } 
 catch 
 { 
 throw; 
 } 
 finally 
 { 
 dCmd.Dispose(); 
 conn.Close(); 
 conn.Dispose(); 
 } 
 } 
 } 
}
Figura 97 – Desenvolvimento efetuado na classe DAL
 observação
Classe BAL é a camada de negócio e Classe DAL é a camada de dados. 
A nomenclatura das camadas pode variar em diferentes implementações 
de projetos, nos quais poderão ser apresentadas, em outras bibliografias, 
como BLL (classe de negócio) e DAO (classe de dados).
Toda a nomenclatura apresentada não tem impacto no desenvolvimento 
do código, servindo apenas para fazer referências de todas as camadas 
distribuídas da solução da aplicação web.
97
Re
vi
sã
o:
 G
io
va
nn
a 
/ R
os
e 
- 
Di
ag
ra
m
aç
ão
: M
ár
ci
o 
- 
06
/0
8/
20
15
Desenvolvimento De software para internet
<?xml version=”1.0”?> 
 
<!‑‑ 
  For more information on how to configure your ASP.NET application, 
please visit 
 http://go.microsoft.com/fwlink/?LinkId=169433 
 ‑‑> 
 
<configuration> 
 <connectionStrings> 
 <add name=”ApplicationServices” 
 connectionString=”data source=.\SQLEXPRESS;Integrated Security
=SSPI;AttachDBFilename=|DataDirectory|\aspnetdb.mdf;User Instance=true” 
 providerName=”System.Data.SqlClient” /> Caminho para a base de 
dados! 
 <add name=”LocalSqlServer” 
 connectionString=”Data Source=.\SQLEXPRESS;database=Escola;Integ
rated Security=True;” 
 providerName=”System.Data.SqlClient”/> 
 </connectionStrings> 
 
 <system.web> 
 <compilation debug=”true” targetFramework=”4.0” /> 
 
 <authentication mode=”Forms”> 
 <forms loginUrl=”~/Account/Login.aspx” timeout=”2880” /> 
 </authentication> 
 
 <membership> 
 <providers> 
 <clear/> 
 <add name=”AspNetSqlMembershipProvider” type=”System.Web.
Security.SqlMembershipProvider” connectionStringName=”ApplicationServi
ces” 
 enablePasswordRetrieval=”false” enablePasswordReset=”true” 
requiresQuestionAndAnswer=”false” requiresUniqueEmail=”false” 
 maxInvalidPasswordAttempts=”5” 
minRequiredPasswordLength=”6” minRequiredNonalphanumericCharacters=”0” 
passwordAttemptWindow=”10” 
 applicationName=”/” /> 
 </providers> 
 </membership> 
 
 <profile> 
 <providers> 
 <clear/> 
 <add name=”AspNetSqlProfileProvider” type=”System.Web.Profile.
SqlProfileProvider” connectionStringName=”ApplicationServices” 
applicationName=”/”/> 
 </providers> 
 </profile> 
 
 <roleManager enabled=”false”> 
 <providers> 
 <clear/>
98
Re
vi
sã
o:
 G
io
va
nn
a 
/ R
os
e 
- 
Di
ag
ra
m
aç
ão
: M
ár
ci
o 
- 
06
/0
8/
20
15
Unidade IV
 <add name=”AspNetSqlRoleProvider” type=”System.Web.Security.
SqlRoleProvider” connectionStringName=”ApplicationServices” 
applicationName=”/” /> 
 <add name=”AspNetWindowsTokenRoleProvider” type=”System.Web.
Security.WindowsTokenRoleProvider” applicationName=”/” /> 
 </providers> 
 </roleManager> 
 
 </system.web> 
 
 <system.webServer> 
 <modules runAllManagedModulesForAllRequests=”true”/> 
 </system.webServer> 
</configuration>
Figura 98 – Arquivo Web.config contendo caminho para a base de dados
Figura 99 – Página que gera lista de registros
using System;
using System.Web.UI.WebControls;
using BAL;
using System.Data;
namespace TresCamadasAdoNet
{
 public partial class ListarRegistros : System.Web.UI.Page
 {
 DataTable tabela = null;
 protected void Page_Load(object sender, EventArgs e)
 {
99
Re
vi
sã
o:
 G
io
va
nn
a 
/ R
os
e 
- 
Di
ag
ra
m
aç
ão
: M
ár
ci
o 
- 
06
/0
8/
20
15
Desenvolvimento De software para internet
 if (!IsPostBack)
 BindGrid();
 }
 /// <summary>
 /// Disparado quando o botão Cancel for clicado
 /// </summary>
 /// <param name=”sender”></param>
 /// <param name=”e”></param>
 protected void CancelRecord(object sender, 
GridViewCancelEditEventArgs e)
 {
 GridView1.EditIndex = ‑1;BindGrid();
 }
 /// <summary>
 /// Disparado quando o botão Edit for clicado
 /// </summary>
 /// <param name=”sender”></param>
 /// <param name=”e”></param>
 protected void EditRecord(object sender, GridViewEditEventArgs 
e)
 {
 GridView1.EditIndex = e.NewEditIndex;
 BindGrid();
 }
 private DataTable BindGrid()
 {
 Negocios p = new Negocios();
 try
 {
 tabela = p.Load();
 GridView1.DataSource = tabela;
 GridView1.DataBind();
 }
 catch (Exception ee)
 {
 lblMensagem.Text = ee.Message.ToString();
 }
 finally
 {
 p = null;
 }
 return tabela;
 }
 protected void DeleteRecord(object sender, 
GridViewDeleteEventArgs e)
 {
 int personID = Int32.Parse(GridView1.DataKeys[e.RowIndex].
Value.ToString());
100
Re
vi
sã
o:
 G
io
va
nn
a 
/ R
os
e 
- 
Di
ag
ra
m
aç
ão
: M
ár
ci
o 
- 
06
/0
8/
20
15
Unidade IV
 // instancia uma BAL
 Negocios pBAL = new Negocios();
 try
 {
 pBAL.Delete(personID);
 lblMensagem.Text = “Registro deletado com sucesso.”;
 }
 catch (Exception ee)
 {
 lblMensagem.Text = ee.Message.ToString();
 }
 finally
 {
 pBAL = null;
 }
 GridView1.EditIndex = ‑1;
 // atualiza a lista
 BindGrid();
 }
 protected void UpdateRecord(object sender, 
GridViewUpdateEventArgs e)
 {
 int codigo = Int32.Parse(GridView1.DataKeys[e.RowIndex].
Value.ToString());
 int resultado = 0;
 GridViewRow row = GridView1.Rows[e.RowIndex];
 TextBox tNome = (TextBox)row.FindControl(“txtNome”);
 TextBox tEmail = (TextBox)row.FindControl(“txtEmail”);
 TextBox tIdade = (TextBox)row.FindControl(“txtIdade”);
 // instancia uma BAL
 Negocios pBAL = new Negocios();
 try
 {
 resultado = pBAL.Update(codigo, tNome.Text, tEmail.
Text, int.Parse(tIdade.Text));
 if (resultado > 0)
 lblMensagem.Text = “Registro atualizado com 
sucesso.”;
 else
 lblMensagem.Text = “Registro não pode ser 
atualizado.”;
 }
 catch (Exception ee)
 {
 lblMensagem.Text = ee.Message.ToString();
 }
 finally
 {
 pBAL = null;
101
Re
vi
sã
o:
 G
io
va
nn
a 
/ R
os
e 
- 
Di
ag
ra
m
aç
ão
: M
ár
ci
o 
- 
06
/0
8/
20
15
Desenvolvimento De software para internet
 }
 GridView1.EditIndex = ‑1;
 // atualiza a lista
 BindGrid();
 }
 /// <summary>
 /// Fires when page links are clicked
 /// </summary>
 /// <param name=”sender”></param>
 /// <param name=”e”></param>
 protected void ChangePage(object sender, GridViewPageEventArgs 
e)
 {
 GridView1.PageIndex = e.NewPageIndex;
 // atualiza a lista
 BindGrid();
 }
 /// <summary>
 /// Pega o GridView DataSource
 /// </summary>
 private DataTable GridDataSource()
 {
 Negocios p = new Negocios();
 DataTable tabela = new DataTable();
 try
 {
 tabela = p.Load();
 }
 catch (Exception ee)
 {
 lblMensagem.Text = ee.Message.ToString();
 }
 finally
 {
 p = null;
 }
 return tabela;
 }
 protected void CancelaEdicao(object sender, 
GridViewCancelEditEventArgs e)
 {
 }
 
 }
}
Figura 100 – Código encapsulado na página ListaRegistros
102
Re
vi
sã
o:
 G
io
va
nn
a 
/ R
os
e 
- 
Di
ag
ra
m
aç
ão
: M
ár
ci
o 
- 
06
/0
8/
20
15
Unidade IV
using System; 
using System.Web.UI; 
using BAL; 
 
namespace TresCamadasAdoNet 
{ 
 public partial class _Default : System.Web.UI.Page 
 { 
 protected void Page_Load(object sender, EventArgs e) 
 { 
 } 
 
 protected void IncluirRegistros(object sender, EventArgs e) 
 { 
 //valida pagina 
 if (!Page.IsValid) 
 return; 
 
 int intResult = 0; 
 // Para pagina valida continua a inserir 
 // instancia um objeto BAL 
 Negocios pBAL = new Negocios(); 
 // define os valores que serão incluídos 
 string nome = txtNome.Text; 
 string email = txtEmail.Text; 
 int idade = Int32.Parse(txtIdade.Text); 
 
 try 
 { 
 intResult = pBAL.Insert(nome, email, idade); 
 if (intResult > 0) 
 lblMessage.
Text = “Novo registro incluído com sucesso.”; 
 else 
 lblMessage.Text = “Nome [<b>” + txtNome.
Text + “</b>] já existe, tente outro nome”; 
 
 } 
 catch (Exception ee) 
 { 
 lblMessage.Text = ee.Message.ToString(); 
 } 
 finally 
 { 
 pBAL = null; 
 } 
 } 
 
 } 
}
Figura 101 – Código encapsulado na página Default
103
Re
vi
sã
o:
 G
io
va
nn
a 
/ R
os
e 
- 
Di
ag
ra
m
aç
ão
: M
ár
ci
o 
- 
06
/0
8/
20
15
Desenvolvimento De software para internet
 observação
Os códigos encapsulados nas páginas ListarRegistros e Default 
foram criados utilizando a linguagem de programação C#, sendo, assim, 
construídos nos arquivos ListarRegistros.aspx.cs e Default.aspx.cs.
Para se rodar uma página web na IDE do Visual Studio .NET basta acionar o botão F5 do teclado ou 
clicar na seta verde contida no menu da IDE.
 lembrete
A aplicação web será executada, desde que esta não esteja com nenhum 
erro de codificação no projeto.
Figura 102 – Página Default.aspx sendo executada no navegador Firefox
8.2 linQ para Xml
Podemos definir que Linq para XML nada mais é do que um provedor de dados que se utiliza da 
implementação do namespace System.Xml.LINQ, que foi implementado desde da versão do framework 
3.5, no qual ele disponibiliza recursos como leitura, escrita e construção de dados XML.
O trabalho com o LINQ nada mais é do que efetuar consulta de dados. Todas as consultas de dados 
serão extraídas de XML, podendo retornar arquivos de aplicação web, de memória ou até mesmo de web 
service.
104
Re
vi
sã
o:
 G
io
va
nn
a 
/ R
os
e 
- 
Di
ag
ra
m
aç
ão
: M
ár
ci
o 
- 
06
/0
8/
20
15
Unidade IV
 saiba mais
Vale ressaltar que a partir da versão 2008 do Visual Studio, inseriu‑se o 
conceito de LINQ, que é considerada a consulta integrada à linguagem, de 
maneira que se possa aplicar recursos de consulta levando‑se em consideração 
a sintaxe da linguagem C#. Para conhecer mais sobre LINQ, acesse:
LINQ to XML. Microsoft Developer Network. 2015. Disponível em: 
<https://msdn.microsoft.com/pt‑br/library/bb387098(v=vs.120).aspx>. 
Acesso em: 5 ago. 2015.
Nas figuras a seguir, apresentamos um exemplo em que será criada uma aplicação que deverá listar 
dados por meio da aplicação de conceitos LINQ.
<%@ Page Language=”C#” AutoEventWireup=”true” CodeFile=”Default.aspx.
cs” Inherits=”_Default” %> 
 
<!DOCTYPE html PUBLIC “‑//W3C//DTD XHTML 1.0 Transitional//EN” 
“http://www.w3.org/TR/xhtml1/DTD/xhtml1‑transitional.dtd”> 
 
<html xmlns=”http://www.w3.org/1999/xhtml”> 
<head id=”Head1” runat=”server”> 
 <title>LINQ para XML</title> 
 <style type=”text/css”> 
 .style1 
 { 
 width: 100%; 
 } 
 .style2 
 {font‑family: “Trebuchet MS”; 
 font‑size: small; 
 } 
 </style> 
</head> 
<body> 
 <form id=”form1” runat=”server”> 
 <div style=”width: 450px”> 
 <table class=”style1” border=”1”> 
 <tr> 
 <td class=”style2”> 
 Exibir Todos os dados</td> 
 <td> 
 
 <asp:Button ID=”butGetXML” runat=”server” Text=”Exibir XML” 
onclick=”butGetXML_Click” /> 
 </td> 
 </tr> 
 <tr>
105
Re
vi
sã
o:
 G
io
va
nn
a 
/ R
os
e 
- 
Di
ag
ra
m
aç
ão
: M
ár
ci
o 
- 
06
/0
8/
20
15
Desenvolvimento De software para internet
 <td class=”style2”> 
 Filtrar por Cidade:</td> 
 <td> 
 <span class=”style2”>Cidade</span>: 
<asp:DropDownList ID=”ddlCidade” runat=”server” Height=”17px” 
Width=”115px”> 
</asp:DropDownList>&nbsp;&nbsp;&nbsp;&nbsp; 
<asp:Button ID=”butFiltraXML” runat=”server” Text=”Filtrar XML” 
onclick=”butFiltraXML_Click” /> 
 </td> 
 </tr> 
 <tr> 
 <td class=”style2” colspan=”2”> 
 App_data/Clientes.xml</td> 
 </tr> 
 <tr> 
 <td colspan=”2” bgcolor=”#FFFFCE”> 
 <asp:Literal ID=”litXMLDados” runat=”server”></asp:Literal> 
 </td> 
 </tr> 
 </table> 
 </div> 
 </form> 
</body> 
</html>
Figura 103 – Página Default.aspx
Figura 104 – Página Default.aspx em modo design
106
Re
vi
sã
o:
 G
io
va
nn
a 
/ R
os
e 
- 
Di
ag
ra
m
aç
ão
: M
ár
ci
o 
- 
06
/0
8/
20
15
Unidade IV
using System; 
using System.Configuration; 
using System.Data; 
using System.Linq; 
using System.Web; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.HtmlControls; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Xml.Linq; 
using System.Xml; 
 
public partial class _Default : System.Web.UI.Page 
{ 
 protected void butGetXML_Click(object sender, EventArgs e) 
 { 
 XDocument xmlDoc = XDocument.Load(Server.MapPath(“App_Data/
Clientes.xml”)); 
 
 var clientes = from cliente in xmlDoc.Descendants(“Cliente”) 
 select new 
 { 
 Nome = cliente.Element(“Nome”).Value, 
 Cidade = cliente.Element(“Cidade”).Value, 
 Idade = cliente.Element(“Idade”).Value, 
 }; 
 
 litXMLDados.Text = “”; 
 foreach (var cliente in clientes) 
 { 
 litXMLDados.Text = litXMLDados.
Text + “Nome : “ + cliente.Nome + “<br />”; 
 litXMLDados.Text = litXMLDados.
Text + “Cidade: “ + cliente.Cidade + “<br />”; 
 litXMLDados.Text = litXMLDados.
Text + “Idade : “ + cliente.Idade + “<br /><br />”; 
 } 
 
 if (litXMLDados.Text == “”) 
 litXMLDados.Text = “Nada encontrado.”; 
 } 
 protected void Page_Load(object sender, EventArgs e) 
 { 
 if (!IsPostBack) 
 carregaDLL(); 
 } 
 protected void carregaDLL() 
 { 
 XmlDocument doc = new XmlDocument(); 
 doc.Load(Server.MapPath(“App_Data/Clientes.xml”)); 
 XmlNodeList nodeList = doc.SelectNodes(“Clientes/Cliente”); 
 
 foreach (XmlNode node in nodeList)
107
Re
vi
sã
o:
 G
io
va
nn
a 
/ R
os
e 
- 
Di
ag
ra
m
aç
ão
: M
ár
ci
o 
- 
06
/0
8/
20
15
Desenvolvimento De software para internet
 ddlCidade.Items.Add(new ListItem(node.
SelectSingleNode(“Cidade”).InnerText)); 
 } 
 protected void butFiltraXML_Click(object sender, EventArgs e) 
 { 
 XDocument xmlDoc = XDocument.Load(Server.MapPath(“App_Data/
Clientes.xml”)); 
 
 var clientes = from cliente in xmlDoc.Descendants(“Cliente”) 
 where cliente.Element(“Cidade”).
Value == ddlCidade.SelectedItem.ToString() 
 select new 
 { 
 Nome = cliente.Element(“Nome”).Value, 
 Cidade = cliente.Element(“Cidade”).Value, 
 Idade = cliente.Element(“Idade”).Value, 
 }; 
 
 litXMLDados.Text = “”; 
 foreach (var cliente in clientes) 
 { 
 litXMLDados.Text = litXMLDados.
Text + “Nome : “ + cliente.Nome + “<br />”; 
 litXMLDados.Text = litXMLDados.
Text + “Cidade: “ + cliente.Cidade + “<br />”; 
 litXMLDados.Text = litXMLDados.
Text + “Idade : “ + cliente.Idade + “<br /><br />”; 
 } 
 
 if (litXMLDados.Text == “”) 
 litXMLDados.Text = “Nada encontrado.”; 
 } 
}
Figura 105 – Programação da página Default utilizando C#
 resumo
Nesta unidade, vimos como podemos combinar e integrar técnicas 
de desenvolvimento web, tais como o bootstrap, que, de fato, enriquece 
todo o desenvolvimento de aplicação web, principalmente tratando de 
sua recursividade, disponibilizando, assim, a visualização de páginas 
tanto em desktop quando em smartphones e tablets, sem perder a 
qualidade da página.
Vimos também conceitos de conexão com banco de dados, utilizando 
como base a linguagem C#. Trabalhando com desenvolvimento de aplicações 
web, utilizamos recursos da linguagem C# para efetuar a codificação de banco 
de dados, bem como toda a lógica de botões inseridos nas páginas aspx.
108
Re
vi
sã
o:
 G
io
va
nn
a 
/ R
os
e 
- 
Di
ag
ra
m
aç
ão
: M
ár
ci
o 
- 
06
/0
8/
20
15
Unidade IV
Conceitos de Linq e XML enriqueceram o desenvolvimento de aplicação 
web, bem como todo o trabalho com o Linq, que, na verdade, nada mais 
é do que efetuar consulta de dados. Entretanto, atuando com XML, todas 
as consultas de dados serão extraídas dela, podendo retornar arquivos de 
aplicação web, de memória ou até mesmo de web service.
Finalmente, ressaltamos toda a construção de arquitetura web e sua 
execução, lembrando da preocupação atual em desenvolver com qualidade, 
agilidade e principalmente com a intenção de visualização de página em 
qualquer dispositivo conectado à internet.
109
Re
vi
sã
o:
 G
io
va
nn
a 
/ R
os
e 
- 
Di
ag
ra
m
aç
ão
: M
ár
ci
o 
- 
06
/0
8/
20
15
FIGURAS E ILUSTRAÇÕES
Figura 68
DESMAJAXRPFIG01.JPG. Disponível em: <http://www.devmedia.com.br/imagens/javamagazine/
desmajaxrpfig01.jpg>. Acesso em: 5 ago. 2015.
REFERênCIAS
Textuais
BORGES JÚNIOR, M. P. ASP.NET utilizando C#: de programador para programador. Rio de Janeiro: 
Ciência Moderna, 2006.
CAMARA, F. Orientação a objeto com .NET. 2. ed. Santa Catarina: Visual Books. 2006.
CC BY. Bootstrap. [s.d.]. Disponível em: <http://twitter.github.com/bootstrap/index.html>. Acesso em: 
29 jul. 2015.
GROFFE, R. J. ASP.NET MVC: Desenvolvendo soluções para web. DevMedia, Rio de Janeiro, [s.d.]. 
Disponível em: <http://www.devmedia.com.br/asp‑net‑mvc‑desenvolvendo‑solucoes‑para‑web 
‑revista‑net‑magazine‑91/22878>. Acesso em: 12 jul. 2015.
SENDIN, R. ASP.NET: WebForms X MVC. DevMedia, Rio de Janeiro, [s.d.]a. Disponível em: <http://www.
devmedia.com.br/artigo‑net‑magazine‑65‑asp‑net‑webforms‑x‑mvc/13896>. Acesso em: 5 ago. 2015
___. ASP.NET MVC 3 com Razor. DevMedia, Rio de Janeiro, [s.d.]b. Disponível em: <http://www.
devmedia.com.br/asp‑net‑mvc‑3‑com‑razor‑revista‑net‑magazine‑91/22872>. Acesso em: 29 jul. 
2015.
DURÃES, R. Desenvolvendo para web usando o Visual Studio 2008. Rio de Janeiro: Brasport, 2011.
INTRODUÇÃO ao .NET Framework. Microsoft Developer Network, 2015. Disponível em: <https://msdn.
microsoft.com/pt‑br/library/hh425099(v=vs.110).aspx>. Acesso em: 30 jul. 2015.
JANONES, R. de S. Qualidade de software: uma questão de eficiência. DevMedia, Rio de Janeiro, [s.d.]. 
Disponível em: <http://www.devmedia.com.br/qualidade‑de‑software‑uma‑questao‑de‑eficiencia/ 
17803>. Acesso em: 5 ago. 2015.
KLEINA, N. A história da internet: pré‑década de 60 até anos 80 [infográfico]. Tecmundo, Curitiba, 29 
abr. 2011. Disponívelem: <http://www.tecmundo.com.br/infografico/9847‑a‑historia‑da‑internet‑ 
pre‑decada‑de‑60‑ate‑anos‑80‑infografico‑.htm>. Acesso em: 22 jul. 2015.
110
Re
vi
sã
o:
 G
io
va
nn
a 
/ R
os
e 
- 
Di
ag
ra
m
aç
ão
: M
ár
ci
o 
- 
06
/0
8/
20
15
KOBAYACHI, C.; BEU, E. L.; Webdesigner: estrutura e programação. 9. ed. São Paulo: Erica, 2004.
LINQ to XML. Microsoft Developer Network, 2015. Disponível em: <https://msdn.microsoft.com/pt‑br/
library/bb387098(v=vs.120).aspx>. Acesso em: 5 ago. 2015
LOTAR, A. Programando com ASP.NET MVC. São Paulo: Novatec, 2011.
MANZANO, J. A. N.; TOLEDO, S. A. Guia de orientação e desenvolvimento de sites – HTML, XHTML, CSS e 
JavaScript/JScript. 2. ed. São Paulo: Erica, 2010.
MÉTODO TraceWrite (String, String). Microsoft Developer Network, 2015. Disponível em: <https://
msdn.microsoft.com/pt‑br/pt/library/247w289d%28v=vs.110%29.aspx>. Acesso em: 28 jul. 2015.
PISA, P. O que é IP? Techtudo, 7 maio 2012. Disponível em: <http://www.techtudo.com.br/artigos/
noticia/2012/05/o‑que‑e‑ip.html>. Acesso em: 27 jul. 2015.
PROFFITT, B.; ZUPAN, A. XHTML: desenvolvimento web. São Paulo: Makron Books, 2001.
SHEPHERD, G. Microsoft ASP.NET 2.0: passo a passo. Porto Alegre: Bookman, 2008.
TAKAHASHI, T. (Org.). Sociedade da informação no Brasil: o livro verde. Brasília: Ministério da Ciência e 
Tecnologia, 2000.
Site
<http://www.microsoft.com/brasil/msdn>
111
Re
vi
sã
o:
 G
io
va
nn
a 
/ R
os
e 
- 
Di
ag
ra
m
aç
ão
: M
ár
ci
o 
- 
06
/0
8/
20
15
112
Re
vi
sã
o:
 G
io
va
nn
a 
/ R
os
e 
- 
Di
ag
ra
m
aç
ão
: M
ár
ci
o 
- 
06
/0
8/
20
15
113
Re
vi
sã
o:
 G
io
va
nn
a 
/ R
os
e 
- 
Di
ag
ra
m
aç
ão
: M
ár
ci
o 
- 
06
/0
8/
20
15
114
Re
vi
sã
o:
 G
io
va
nn
a 
/ R
os
e 
- 
Di
ag
ra
m
aç
ão
: M
ár
ci
o 
- 
06
/0
8/
20
15
115
Re
vi
sã
o:
 G
io
va
nn
a 
/ R
os
e 
- 
Di
ag
ra
m
aç
ão
: M
ár
ci
o 
- 
06
/0
8/
20
15
116
Re
vi
sã
o:
 G
io
va
nn
a 
/ R
os
e 
- 
Di
ag
ra
m
aç
ão
: M
ár
ci
o 
- 
06
/0
8/
20
15
Informações:
www.sepi.unip.br ou 0800 010 9000

Outros materiais