WebMatrix - Consultando, Inserindo , Excluindo e atualizando dados - IV
Se você esta chegando agora deve saber que...
Abaixo vemos o resultado do trabalho feito na terceira parte do artigo : a página EditarProdutos.cshtml com os valores atualizados:
Criando as páginas para excluir dados
Nossa próxima tarefa é criar a página que permite excluir dados do banco de dados Padaria.sdf.
Depois que os dados foram inseridos em uma tabela, talvez seja necessário atualizá-los; e depois de atualizá-los, você pode querer excluir alguma informação.
Neste artigo eu mostro como criar duas páginas cujas funções são:
Obs: Em um outro artigo irei mostrar como podemos implementar a segurança.
a-) Criando a página para selecionar o produto a excluir
Vamos abrir o projeto que criamos até o momento para continuar a implementar as funcionalidades.
Abra o WebMatrix e na janela principal clique no ícone My Sites;
A seguir selecione o site Padaria que criamos no primeiro artigo;
Na próxima janela clique no menu Files; Observe os arquivos que já criamos para o site;
Vamos criar um novo arquivo CSHTML chamado ListaProdutosDeletar.cshtml selecionando a opção New -> New File;
Na janela seguinte selecione o tipo CSHTML, informe o nome ListaProdutosDeletar.cshtml e clique no botão OK;
Em seguida digite o código abaixo substituindo o código inicial da página ListaProdutosDeletar.cshtml conforme o da figura abaixo:
A única diferença entre essa página e a página de EditarProdutos.cshtml é que a tabela HTML nesta página inclui o link Deletar ao invés do link Editar. Quando você clica neste link, você será levado para a página DeletarProduto.cshtml (que iremos criar em seguida), onde você poderá confirmar a exclusão do registro selecionado.
O trecho de código abaixo mostra a utilização da linha de código <a href="@Href("~/DeletarProduto",row.Codigo)" que chama a página DeletarProduto.cshtml e passa o código do produto a ser deletado;
<tbody> @foreach (var row in db.Query(selectQueryString)) { <tr> <td><a href="@Href("~/DeletarProduto", row.Codigo)">Editar</a></td> <td>@row.Nome</td> <td>@row.Descricao</td> <td>@row.Preco</td> </tr> } </tbody> |
O código cria uma âncora HTML (um elemento <a>), cujo atributo href é definido dinamicamente. O atributo href especifica a página para exibir quando o usuário clica no link. Ele também passa o valor do Codigo da linha(registro) atual para o link.
Quando o usuário clicar no link será criada a seguinte URL : http://<servidor>/DeletarProduto/4
Vamos visualizar a página executando-a. Para isso , selecione o arquivo ListaProdutosDeletar.cshtml e clicando o botão direito do mouse selecione a opção Launch in browser;
Você deverá obter a página exibida na figura abaixo, onde vemos os produtos e o link Deletar que deverá chamar a página DeletarProduto.cshtm passando o código do produto;
Nossa próxima tarefa será então criar a página para exibir o produto selecionado e solicitar a confirmação de exclusão do produto e salvar as alterações no banco de dados.
b-) Criando a página para confirmar a exclusão de um registro selecionado
Vamos repetir os procedimento do item a para criar a página ListaProdutosDeletar.cshtml;
- Selecione a opção New -> New File do menu;
- Na janela seguinte selecione o tipo CSHTML, informe o nome
DeletarProduto.cshtml e clique no botão OK;
Em seguida digite o código abaixo substituindo o código inicial da página DeletarProduto.cshtml conforme o da figura abaixo:
@{ var db = Database.Open("Padaria"); var CodigoProduto = UrlData[0]; if (CodigoProduto.IsEmpty()) { Response.Redirect(@Href("~/ListaProdutosDeletar")); } var prod = db.QuerySingle("SELECT * FROM PRODUTOS WHERE CODIGO = @0", CodigoProduto); if( IsPost && !CodigoProduto.IsEmpty()) { var deleteQueryString = "DELETE FROM Produtos WHERE Codigo=@0"; db.Execute(deleteQueryString, CodigoProduto); Response.Redirect("~/ListaProdutosDeletar"); } } <!DOCTYPE html> <html <head> <title>Deletar Produto</title> </head> <body> <h1>Deleta o Produto - Confirmação</h1> <form method="post" action="" name="form"> <p>Tem certeza que deseja excluir o seguinte produto ? </p> <p>Nome: @prod.Nome <br /> Descrição: @prod.Descricao <br /> Preço : @prod.Preco</p> <p><input type="submit" value="Deletar" /></p> </form> </body> </html>
|
No corpo da página temos um formulário HTML onde um produto é exibido e onde os usuários podem excluí-lo. Para obter o produto a ser exibido, primeiro abrimos o banco de dados e a seguir usamos uma instrução SQL:
var db = Database.Open("Padaria");
Para obter o valor do Codigo para passar para a instrução
SELECT podemos ler o valor passado para a página como parte da URL usando a
seguinte sintaxe:
var CodigoProduto = UrlData[0];
A seguir se o código do produto for inválido o usuário será redirecionado para a página ListaProdutosDeletar novamente;
if (CodigoProduto.IsEmpty())
{
Response.Redirect(@Href("~/ListaProdutosDeletar"));
}
Se o código do produto for válido então a instrução SQL SELECT será montada usando o código do produto obtido como parâmetro
var prod = db.QuerySingle("SELECT * FROM PRODUTOS WHERE CODIGO = @0", CodigoProduto); if( IsPost && !CodigoProduto.IsEmpty()) { var deleteQueryString = "DELETE FROM Produtos WHERE Codigo=@0"; db.Execute(deleteQueryString, CodigoProduto); Response.Redirect("~/ListaProdutosDeletar"); } } |
Para obter o registro do produto com o código informado , usamos o método QuerySingle, passando a string SQL e o código do produto lido da URL, que retorna apenas um único registro:
var prod = db.QuerySingle("SELECT * FROM PRODUTOS WHERE CODIGO = @0", CodigoProduto);
O registro obtido é retornado na variável prod e assim podemos obter o valor de cada coluna e exibi-los na página HTML conforme abaixo:
<p>Nome: @prod.Nome <br />
Descrição: @prod.Descricao <br />
Preço : @prod.Preco</p>
A página, em seguida, solicita que o usuário clique em um botão para realmente excluir o registro. Esta é uma medida de segurança importante: quando você executar operações sensíveis em seu site como atualizar ou excluir dados, essas operações devem ser sempre feitas com uma operação de POST, e não uma operação GET.
Se o seu site está configurado de forma que uma operação de exclusão pode ser realizada utilizando uma operação GET, qualquer pessoa pode passar uma URL, como http:// <servidor>/DeletarProduto/4 e apagar tudo o que eles querem de seu banco de dados.
Ao adicionar a confirmação e codificação da página para que a exclusão só pode ser realizada através de um POST, você adiciona uma medida de segurança para o seu site.
O código que realiza a exclusão do registro utiliza uma instrução SQL DELETE : DELETE FROM Produtos WHERE Codigo=@0"
Vamos então verificar se as páginas que criamos estão funcionando corretamente.
1- Selecione o arquivo ListaProdutosDeletar.cshtml e clicando o botão direito do mouse selecione a opção Launch in browser;
A página ListarProdutosDeletar exibe a relação dos produtos com o link para escolher o produto a deletar:
2- Clique no link Deletar para o produto Bolo de Cenoura;
A página abaixo mostra o produto selecionado e o botão para confirmar a exclusão. Note a URL : http://localhost:54613/DeletarProduto/7
Clicando no botão - Deletar - o registro será excluído e retornaremos para página ListarProdutosDeletar :
Dessa forma o usuário visualiza a página de produtos a serem excluídos novamente e poderá excluir novos registros se desejar.
Dessa forma concluímos a implementação das operações para incluir, alterar, consultar e excluir dados da nossa aplicação Web usando o WebMatrix e o Razor.
Muito simples , não é mesmo ????
Pegue o projeto completo aqui: Padaria_WebMatrix.zip (Deve ser aberto no WebMatrix)
Eu sei é apenas WebMatrix, mas eu gosto...
"Tornou pois Jesus a dizer-lhes: Em verdade vos digo que eu sou a porta das ovelhas. Todos quantos vieram antes de mim são ladrões e salteadores; mas as ovelhas não os ouviram. Eu sou a porta; se alguém entrar por mim. salvar-se-á, e entrará, e sairá, e achará pastagens." (João 10:7-9)
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C