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.

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s