Qual é a melhor maneira de implementar a validação de campo usando ASP.NET MVC?

StackOverflow https://stackoverflow.com/questions/16747

  •  08-06-2019
  •  | 
  •  

Pergunta

Estou construindo um site público usando ASP.NET, como parte da entrega preciso fazer um Site Admin para entrada de dados do material mostrado no site público, queria saber quais técnicas ou procedimentos as pessoas estão usando para validar entradas usando ASP .NET MVC.

Foi útil?

Solução

Dê uma olhada no Plug-in de validação JQuery este plugin é incrível, é fácil de implementar e tem todos os recursos que você precisa, incluindo validação remota via AJAX.

Também um exemplo de método de controlador MVC pode ser encontrado aqui que basicamente usa o tipo de ação JsonResult como:

public JsonResult CheckUserName(string username)
{
    return Json(CheckValidUsername(username));
}

Outras dicas

@Chuck - Você ainda não pode usar os controles AjaxToolKit no ASP.NET MVC.Eles funcionam apenas no modelo de postback de página ASP.NET.

Atualizar:

A partir de 20 de agosto de 2008, você poderá usar somente os arquivos de script do Ajax Control Toolkit dentro do ASP.NET MVC Framework.Aqui está um link para o liberar.

Também, aqui está um tutorial sobre usá-los para criar um calendário pop-up por Stephen Walther.

Eu só quero ter certeza de que todos receberão as informações corretas, se lerem este tópico.

IMO usando xVal com jQuery e DataAnnotationsModelBinder é a melhor combinação.

Às vezes, porém, existem regras de validação que não podem ser verificadas inteiramente no lado do cliente, então você precisa usar a validação remota do lado do cliente.

Eu descobri uma maneira de implementar genericamente a validação remota do lado do cliente com xVal/jQuery.validate para que

  • As regras de validação permanecem exclusivamente no seu modelo ASP.NET MVC
  • Você escreve cada regra de validação apenas uma vez e somente em código C# facilmente testável.Não há JavaScript ou outra contraparte do lado do cliente.
  • Não há necessidade de ramificar ou modificar xVal ou jquery.validate
  • Tudo o que você precisa fazer para cada nova regra de validação de formulário remoto é derivar da classe base mostrada neste artigo.

Eu escrevi um artigo do blog sobre isso descrevendo todos os detalhes.

Eu gosto de usar o Validação ao vivo biblioteca em meus aplicativos ASP.NET MVC.Com ele consegui configurar uma forma de fazer validação no cliente e no servidor.Dessa forma, o usuário saberá que algo está errado antes mesmo de enviar o formulário e então usará a funcionalidade do servidor para os demais casos remotos.

Comecei com este post que faz um ótimo trabalho sobre como configurar uma configuração semelhante:

Validação do lado do cliente baseada em modelo para ASP.NET MVC

O meu caminho:

Estou seguindo o exemplo mostrado no controlador de conta fornecido com a versão Preview 4, onde o campo é verificado no controlador e se um erro for encontrado, uma matriz de erros de string é agregada para exibição posterior na mesma visualização que iniciou o solicitar.

Eu também tenho acompanhado os pensamentos de Stephen Walther em MVC e eu penso esta postagem é ótimo preencher novamente os campos com os dados enviados para que sejam alterados antes de enviá-los novamente.

O que vocês usam?

Você já olhou os controles fornecidos com o AjaxToolKit?Usei o MaskedEditExtender e o ValidatorCalloutExtender e fiquei muito satisfeito com os resultados.

@Dale - obrigado por me corrigir nisso!Não sabia disso (comecei a usar o kit de ferramentas na semana passada).Por favor, desconsidere minha sugestão :)

@Zack:Sim, eu também li esse post e, com base nele, o SO usa jQuery como sua biblioteca javascript.Não posso falar pela equipe SO, mas meu palpite é que é mais do que provável que eles estejam usando os recursos ajax dentro do jquery para lidar com suas solicitações ajax.Na verdade, não é tão ruim codificar manualmente se você usar uma biblioteca javascript como jQuery, Protótipo, e MooTools.Em seguida, você usa o novo valor de retorno JsonResult ActionResult para suas ações e faz solicitações ajax contra elas.Essas bibliotecas encapsulam os objetos XmlHttpRequest para você e facilitam a realização de chamadas ajax e a segurança do navegador.

Você pode usar o Estrutura de validação .net no codeplex se você deseja validação do lado cliente/servidor.Ele gera código para o plugin de validação jQuery com base nas regras definidas no modelo.Além disso, se você usar a funcionalidade "avançada" da estrutura, poderá controlar manualmente as configurações do plugin de validação do jQuery.Confira a início rápido do mvc.

Use um híbrido de validação do lado do cliente e validação do lado do servidor.

Para validação do lado do cliente, a abordagem descrita no resposta de Daniel Pollard parece bom.A validação do lado do cliente não é obrigatória, mas proporcionará ao usuário uma experiência mais agradável e responsiva.

A validação do lado do servidor, por outro lado, deveria ser obrigatória:nunca confie na entrada do cliente.Definitivamente, eu examinaria os recursos fornecidos pela estrutura ASP.NET MVC na Visualização 5 (conforme descrito no resposta de Matt Hinze),

Minha maneira favorita de realizar validação de cliente e servidor usando atributos baseados em modelo.Eu escrevi um pequeno post sobre isso e liberei o código fonte também, que basicamente permitirá que você crie uma classe como esta



class User {

    [Required]
    public string Name{get;set;}

    [Email][Required]
    public string Email {get;set;}
}

E o código javascript apropriado será gerado para realizar a validação do cliente, bem como o executor de validação do lado do servidor validará o formulário enviado.

Leia a postagem aqui

@Mandril - Sem problemas.É para isso que serve o SO.Você aprende algo e a pessoa que faz a pergunta aprende alguma coisa.

Como o AJAX é tratado no Stack Overflow?JQuery faz isso?

  • Clique com o botão direito na página
  • Procure por 'Exibir código-fonte da página' no menu pop-up
  • Clique

:-)

Se você quiser manter a funcionalidade pronta para uso, mas precisar estendê-la, dê uma olhada em minha resposta aqui para uma pergunta sobre IDataError.

Basicamente eu uso anotações de dados e um modelbinder para uma lógica mais complicada.Descobri que é uma maneira bastante limpa e me permite permanecer dentro dos limites do que a MS está fornecendo.

Eu explico como usar um modelbinder para adicionar verificação de 'nível de classe' ao seu modelo sem ter que usar IDataError - o que, como você viu aqui, pode ser bastante desajeitado.Ele ainda permite usar atributos [Obrigatórios] ou quaisquer outros atributos de validação personalizados que você tenha, mas permite adicionar ou remover erros de modelo individuais.Para saber mais sobre como usar anotações de dados, eu recomendo fortemente esta postagem de Scott Gu.

Uma das maneiras de implementar a validação no ASP.NET MVC é usar anotações de dados junto com a validação do lado do cliente.Esse artigo mostra como podemos fazer isso para classes de modelo geradas pela estrutura de entidade.

Dale Ragan escreveu:

Você não pode usar os controles AjaxToolKit no ASP.NET MVC

Como o AJAX é tratado no Stack Overflow?JQuery faz isso?Em sua postagem sobre codificação de terror Segredos dos Ninjas JavaScript Jeff escreveu sobre o uso de JQuery enquanto escrevia Stack Overflow.

Certamente eles não codificaram manualmente.Fiz isso uma vez com todo o JavaScript XMLHttpRequest quando o termo "AJAX" foi popularizado por volta de 2005.Foi um pesadelo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top