ASP .NET MVC - Fazendo o CRUD com LINQ to SQL usando um Repositório (C#) - II

 Esta é a continuação da primeira parte do artigo onde criamos o projeto ASP .NET MVC e usamos o LINQ to SQL para realizar o mapeamento da tabela Clientes do banco de dados Cadastro.mdf do SQL Server, definimos um repositório e criamos o nosso controlador.

Vamos continuar criando as Views do projeto MVC.

Recursos usados :

1- Gerando a view para exibir os clientes

Abra o projeto Mvc_Crud_Linq no Visual Studio 2012 Express for Web e a seguir abra o arquivo ClienteController na pasta Controllers;

Clique com o botão direito do mouse sobre o método Index() do controlador e a seguir clique em Add View;

Marque a opção - Create a strongly-type view e escolha a classe do modelo conforme a figura abaixo:

Clique no botão Add;

Esta view irá exibir todos os clientes e será gerada com o código abaixo:

@model IEnumerable<Mvc_Crud_LinqToSql.Models.ClienteModel>
@{
    ViewBag.Title = "Index";
}
<h2>Index</h2>
<p>
    @Html.ActionLink("Create New", "Create")
</p>
<table>
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.Nome)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Endereco)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Telefone)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Email)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Observacao)
        </th>
        <th></th>
    </tr>
@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.Nome)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Endereco)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Telefone)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Email)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Observacao)
        </td>
        <td>
            @Html.ActionLink("Edit", "Edit", new { id=item.ID }) |
            @Html.ActionLink("Details", "Details", new { id=item.ID }) |
            @Html.ActionLink("Delete", "Delete", new { id=item.ID })
        </td>
    </tr>
}
</table>

2- Gerando a view para detalhes dos clientes

Retornando ao controlador clique com o botão direito do mouse sobre o método Details e a seguir clique em Add View;

Defina as configurações da View conforme mostra a figura a seguir:

Clique no botão Add.

Esta view irá exibir detalhes dos clientes e será gerada com o código abaixo:

@model Mvc_Crud_LinqToSql.Models.ClienteModel
@{
    ViewBag.Title = "Details";
}
<h2>Details</h2>
<fieldset>
    <legend>ClienteModel</legend>
    <div class="display-label">
         @Html.DisplayNameFor(model => model.Nome)
    </div>
    <div class="display-field">
        @Html.DisplayFor(model => model.Nome)
    </div>
    <div class="display-label">
         @Html.DisplayNameFor(model => model.Endereco)
    </div>
    <div class="display-field">
        @Html.DisplayFor(model => model.Endereco)
    </div>
    <div class="display-label">
         @Html.DisplayNameFor(model => model.Telefone)
    </div>
    <div class="display-field">
        @Html.DisplayFor(model => model.Telefone)
    </div>
    <div class="display-label">
         @Html.DisplayNameFor(model => model.Email)
    </div>
    <div class="display-field">
        @Html.DisplayFor(model => model.Email)
    </div>
    <div class="display-label">
         @Html.DisplayNameFor(model => model.Observacao)
    </div>
    <div class="display-field">
        @Html.DisplayFor(model => model.Observacao)
    </div>
</fieldset>
<p>
    @Html.ActionLink("Edit", "Edit", new { id=Model.ID }) |
    @Html.ActionLink("Back to List", "Index")
</p>

3- Gerando a view para editar dados dos clientes

Agora com o arquivo ClienteController aberto clique com o botão direito do mouse sobre o método Edit e a seguir clique em Add View;

Defina as configurações da View conforme mostra a figura a seguir:

Clique no botão Add.

Esta view irá permitir editar dados dos clientes e será gerada com o código abaixo:

@model Mvc_Crud_LinqToSql.Models.ClienteModel
@{
    ViewBag.Title = "Edit";
}
<h2>Edit</h2>
@using (Html.BeginForm()) {
    @Html.AntiForgeryToken()
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>ClienteModel</legend>
        @Html.HiddenFor(model => model.ID)
        <div class="editor-label">
            @Html.LabelFor(model => model.Nome)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Nome)
            @Html.ValidationMessageFor(model => model.Nome)
        </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.Telefone)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Telefone)
            @Html.ValidationMessageFor(model => model.Telefone)
        </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.Observacao)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Observacao)
            @Html.ValidationMessageFor(model => model.Observacao)
        </div>
        <p>
            <input type="submit" value="Save" />
        </p>
    </fieldset>
}
<div>
    @Html.ActionLink("Back to List", "Index")
</div>
@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

4- Gerando a view para deletar dados dos clientes

Agora com o arquivo ClienteController aberto clique com o botão direito do mouse sobre o método Delete e a seguir clique em Add View;

Defina as configurações da View conforme mostra a figura a seguir:

Clique no botão Add.

Esta view irá permitir deletar dados dos clientes e será gerada com o código abaixo:

@model Mvc_Crud_LinqToSql.Models.ClienteModel
@{
    ViewBag.Title = "Delete";
}
<h2>Delete</h2>
<h3>Are you sure you want to delete this?</h3>
<fieldset>
    <legend>ClienteModel</legend>
    <div class="display-label">
         @Html.DisplayNameFor(model => model.Nome)
    </div>
    <div class="display-field">
        @Html.DisplayFor(model => model.Nome)
    </div>
    <div class="display-label">
         @Html.DisplayNameFor(model => model.Endereco)
    </div>
    <div class="display-field">
        @Html.DisplayFor(model => model.Endereco)
    </div>
    <div class="display-label">
         @Html.DisplayNameFor(model => model.Telefone)
    </div>
    <div class="display-field">
        @Html.DisplayFor(model => model.Telefone)
    </div>
    <div class="display-label">
         @Html.DisplayNameFor(model => model.Email)
    </div>
    <div class="display-field">
        @Html.DisplayFor(model => model.Email)
    </div>
    <div class="display-label">
         @Html.DisplayNameFor(model => model.Observacao)
    </div>
    <div class="display-field">
        @Html.DisplayFor(model => model.Observacao)
    </div>
</fieldset>
@using (Html.BeginForm()) {
    @Html.AntiForgeryToken()
    <p>
        <input type="submit" value="Delete" /> |
        @Html.ActionLink("Back to List", "Index")
    </p>
}

5- Gerando a view para criar um novo cliente

Agora com o arquivo ClienteController aberto clique com o botão direito do mouse sobre o método Create e a seguir clique em Add View;

Defina as configurações da View conforme mostra a figura a seguir:

Clique no botão Add.

Esta view irá permitir criar um novo cliente e será gerada com o código abaixo:

@model Mvc_Crud_LinqToSql.Models.ClienteModel
@{
    ViewBag.Title = "Create";
}
<h2>Create</h2>
@using (Html.BeginForm()) {
    @Html.AntiForgeryToken()
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>ClienteModel</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)
        </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.Telefone)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Telefone)
            @Html.ValidationMessageFor(model => model.Telefone)
        </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.Observacao)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Observacao)
            @Html.ValidationMessageFor(model => model.Observacao)
        </div>
        <p>
            <input type="submit" value="Create" />
        </p>
    </fieldset>
}
<div>
    @Html.ActionLink("Back to List", "Index")
</div>
@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

Todas as views foram geradas automaticamente pela plataforma .NET e por isso você terá que alterar as mensagens e títulos que estão em inglês para português se assim desejar.

Todas as views foram geradas na pasta Views/Cliente.

Na janela Solution Explorer podemos ver cada arquivo que criamos e os que foram gerados nas pastas do projeto MVC conforme abaixo:

Executando o projeto ASP .NET MVC

Antes de executar o projeto vamos altera o arquivo _Layout.cshtml na pasta Shared para que a opção do menu exiba o link para página Index na pasta Cliente. Veja o trecho de código alterado abaixo:

...
<nav>
   <ul id="menu">
      <li>@Html.ActionLink("Home", "Index", "Home")</li>
      <li>@Html.ActionLink("About", "About", "Home")</li>
      <li>@Html.ActionLink("Clientes", "Index", "Cliente")</li>
  </ul>
</nav>
...

Executando o projeto teremos a apresentação da view Index da pasta Home que será exibida conforme abaixo:

Clicando no link Clientes iremos visualizar a página Index da pasta Cliente exibindo todos os clientes cadastrados:

Para ver detalhes de um cliente selecione o cliente e clique em Detalhes. Note que na barra de ferramentas vemos o mapeamento indicando a url de destino que foi montada conforme a configuração da tabela de rotas.

A tabela de rotas padrão possui uma rota , e , esta rota padrão divide todas as requisições de entrada em três segmentos:("{controller}/{action}/{id}",)   

Por exemplo , considera a seguinte URL:   /Produto/Detalhes/3

Esta URL é analisada como 3 parâmetros :

Clicando no link Editar iremos para a Details podendo alterar os dados do cliente:

Assim vemos que nosso CRUD esta totalmente funcional provando que podemos ainda usar o LINQ To SQL para fazer o mapeamento objeto relacional criando classes que representam as tabelas do banco de dados.

Pegue o projeto completo aqui : Mvc_Crud_LinqToSql.zip

    João 6:35 Declarou-lhes Jesus. Eu sou o pão da vida; aquele que vem a mim, de modo algum terá fome, e quem crê em mim jamais terá sede.

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 ?

 

             Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter
 

Referências:


José Carlos Macoratti