Olá Vinícius!
O atributo Bind permite que você ajuste o processo de "binding" de modelo para um certo tipo de parâmetro.
Por exemplo, imagine que sua action está esperando um parâmetro do tipo Pessoa
definido assim:
public class Pessoa
{
public Pessoa(string nome, string sobrenome, Sexo sexo)
{
this.Nome = nome;
this.Sobrenome = sobrenome;
if (sexo == Sexo.Masculino)
this.NomeCompleto = "Sr. " + this.Nome + " " + this.Sobrenome;
else
this.NomeCompleto = "Sra. " + this.Nome + " " + this.Sobrenome;
}
public string Nome { get; set; }
public string Sobrenome { get; set; }
public Sexo Sexo { get; set; }
//NomeCompleto é uma propriedade calculada
public string NomeCompleto { get; set; }
}
`
E a Action:
public ActionResult Editar(Pessoa pessoa)
{
...
}
Agora considere que alguém poste nessa action o seguinte JSON:
{
"Nome":"Joao",
"Sobrenome":"Tavares",
"Sexo":"Masculino",
"NomeCompleto":"Sra. Joao Tavares"
}
Agora sua action terá uma pessoa com o NomeCompleto errado ("Sra" em vez de "Sr.").
Para evitar esse comportamento, você deve usar o atributo Bind
e excluir explicitamente a propriedade NomeCompleto
do processo de binding (fazendo assim uma "lista negra")
public ActionResult Editar([Bind(Exclude="NomeCompleto")] Pessoa pessoa)
{
...
}
Da mesma forma, você pode usar Include
para ignorar todas as propriedades (colocá-las na "lista negra") e apenas permitir (colocar na "lista branca") as propriedades definidas na lista do Include
:
public ActionResult Editar([Bind(Include="Nome,Sobrenome,Sexo")] Pessoa pessoa)
{
...
}
No exemplo acima, todas as propriedades fora da lista do Include (Nome,Sobrenome,Sexo) chegarão à action Editar com valor nulo, não importando como tenham sido enviadas pelo cliente.
Boa sorte e bons estudos!