ASP .NET MVC Scaffolding (CodePlex) com Nuget

Nesse post irei apresentar a parte de uma série sobre o pacote NuGet do MvcScaffolding.

O que é o MvcScaffolding?

Não é nenhum tipo de padrão de projeto, na verdade é um projeto CRUD pronto com suas funcionalidades já implementadas, estando disponível no codeplex.
O exemplo que iremos apresentar é um projeto bem simples, a implementação será de uma classe onde chamaremos de Cliente e é através dela que iremos fazer a parte do CRUD utilizando o package do Nuget pelo VS2012. A versão é beta então algumas das funcionalidades podem ainda ter problemas, no final desse post irei deixar a referência da implementação e o blog do criador desse pacote, mas isso não deixa de ser um bom exemplo para podermos praticar.

Passo-a-Passo:
1- Iremos criar um novo projeto ASP .NET MVC 3 ou 4 Web Application;

CreateProject_mvc_scaffolding
2- Selecionar o template do projeto como Empty ou InternetApplication com a ViewEngine do Razor;

Select_Template_Project3- Install o MvcScaffolding package.

Install_package

4- Criaremos nossa classe para podermos aplicar o Scaffold;

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace MvcScaffoldingSample.Models
{
    public class Cliente
    {
        public int Id { get; set; }

        public string Nome { get; set; }

        public int Idade { get; set; }
    }
}

5- Próximo passo é criar o Scaffold Controller da Classe Cliente

Scafoold_Controller_Cliente6- Rodamos o projeto 
Na url colocamos http://locahost:../clientes, pronto podemos já adicionar, editar, excluir e ver os detalhes de nossa implementação;

create delete details list
7- Caso você não tenha o SQL Server instalado
Execute o comando no package source novamente com o comando

PM> Install-Package EFCodeFirst.SqlServerCompact

8- Podemos também forçar a criação do repositório da entidade “Cliente”

Force_Repository

public interface IClienteRepository : IDisposable
{
    IQueryable<Cliente> All { get; }
    IQueryable<Cliente> AllIncluding(params Expression<Func<Cliente, object>>[] includeProperties);
    Cliente Find(int id);
    void InsertOrUpdate(Cliente cliente);
    void Delete(int id);
    void Save();
}

Bom pessoal é isso, como podemos observar praticamente não fizemos quase nenhuma codificação e com a ajuda do Package Scaffold temos uma noção básica de como podemos dar criação aos nossos projetos web. Se quiserem podem acessar o link que está de referência logo abaixo, nesse link tem mais detalhes sobre o assunto.

Referências:

Abraços, até mais.

Model Binding (ASP .NET MVC) – Parte 1

Olá pessoal!

Neste post, iremos dar início a uma série sobre o mecanismo do ASP.NET MVC conhecido por Model Binding, iremos apresentar seus recursos e principais características.

Nesta primeira parte iremos entender o que é o model binding, suas funcionalidades no MVC, a facilidade de se utilizar e como nos ajuda em nossos projetos.

O QUE É MODEL BINDING?

É o processo de criar objetos a partir de dados enviados pelo browser. Mesmo sem saber, utilizamos Model Binding a todo momento. Isso acontece quando implementamos actions que recebem parâmetros com valores primitivos ou até mesmo objetos complexos.
Nesse caso o framework .NET MVC precisa tratar as requisições de forma que possa passar valores apropriados nos parâmetros.

Nesse primeiro exemplo iremos implementar uma action bem simples, que irá ser responsável por recuperar no seu parâmetro valor do tipo inteiro.

1- Vamos ao exemplo:
Primeiro: Iremos criar um novo projeto do tipo ASP .NET MVC 3 ou 4 Web Application, pode ser do tipo Empty.

Segundo: Adicionaremos um Controlador chamando-o de HomeController com duas actions: Index e ExemploBinder. Na action de ExemploBinder irá ter uma variável como parâmetro do tipo inteiro com o nome de valor.

public class HomeController : Controller
{        
    public ActionResult Index()
    {
        return View();
    }

    public ActionResult ExemploBinder(int valor)
    {
        return RedirectToAction("Index");            
    }
}

Terceiro: Adicionaremos uma View chamando-a de Index e criaremos um formulário com dois inputs: <input type=”text” name=”valor” /> e <input type=”submit” value=”Enviar” />.

1:  <h2>Model Binding (ASP .NET MVC) - Parte 1</h2>  
2:  <form action="@Url.Action("ExemploBinder")" method="post">    
3:    <table>  
4:      <tr>  
5:        <td>Valor:</td>  
6:        <td>  
7:          <input type="text" name="valor" />  
8:        </td>  
9:      </tr>      
10:      <tr>  
11:        <td colspan="2" style="text-align: right">  
12:          <input type="submit" value="Enviar" />  
13:        </td>  
14:      </tr>  
15:    </table>  
16:  </form>   

2- Envio dos valores:

Após termos implementado e configurado actions, controller e formulário, vamos ao envio dos valores. Digite qualquer valor do tipo inteiro campo e clique em enviar.

action

Como podemos observar na imagem acima, colocamos  um break point na action para podermos visualizar o valor que está sendo enviado. Nesse caso o valor foi 43 e no envio para a action por de trás o MVC fez o binder para a variável no momento que foi invocado a action.

3- Alguns conceitos:

Todo model binder implementa a interface de IModelBinder, o framework MVC já possui seu próprio model binder default (DefaultModelBinder). O mesmo é utilizado para recuperar os valores que são enviados nas requisições e bindar aos objetos ou tipos de valores que são enviados, e claro também faz a sua implementação do IModelBinder. O DefaultModelBinder segue uma sequência para bindar os valores que são enviados, a sequência segue abaixo:

1- Request.Form
2- RouteData.Values
3- Resquest.QueryString
4- Request.Files

Pela sequência podemos ter uma noção clara e objetiva de como o MVC faz seu mecanismo, quando o envio é realizado o DefaultModelBinder irá bindar a um objeto que atenda com as seguintes assinaturas, conforme apresentado abaixo:

1- Request.Form[“valor”],
2- RouteData.Values[“valor”],
3- Request.QueryString[“valor”],
4- Request.Files[“valor”].

No exemplo que implementamos o binder foi feito apartir do Request.Form, nesse caso foi o primeiro que atendeu as necessidades do framework. A imagem abaixo segue de como ficou o enviou:

request_form

Como podemos notar o tipo de valor que está sendo enviado é do tipo “string”, mas na action que apresentamos, ficou responsável por recuperar valor do tipo inteiro e a responsabilidade é do framework de invocar o seu método BindeModel, isso é feito para recuperar os valores que necessitamos (nesse caso valor do tipo inteiro).

Bom pessoal, por enquanto ficamos por aqui. É um exemplo simples, mas o conceito que é empregado por trás dessa plataforma é incrível. Em breve iremos dar continuidade a mais recursos que são empregados, criaremos mais exemplos e também implementaremos nosso próprio IModelBinder customizado.

Abraços, até o próximo post.