Pergunta

Estou usando o AjaxSubmit para postar um formulário e há validações do lado do servidor feitas usando o XVAL (Ruleexception Way). Não estou usando a maneira de experimentar/capturar o erro ao modelo e depois enviar para visualizar. Em vez disso - quero usar o handleerror attribute e, na Onexception, estou adicionando os erros ao modelo. O principal problema é como obtenho esses erros como um resultado na chamada do Ajax?

Foi útil?

Solução

Não há uma ótima solução construída agora. Fazer isso requer corretamente uma estrutura de validação do lado do cliente (porque, para exibir os erros, você precisa alterar dinamicamente a página HTML) e, até recentemente, o ASP.NET MVC não teve isso. No entanto, o ASP.NET MVC 2 Visuew 2 introduziu a validação do lado do cliente, por isso é razoável presumir que algo pode ser incorporado à estrutura em breve.

Enquanto isso, no entanto, o HandleRorattribute não o ajudará. O HandleRorattribute apenas sabe como redirecionar para uma página de erro, que geralmente não é o que você deseja fazer em resposta a um erro de validação do lado do servidor, mesmo com uma postagem "normal", e certamente não com uma postagem de Ajax.

Lá realmente dois cenários diferentes que você precisa lidar:

  1. Erros de validação não são falhas catastróficas; Eles são simplesmente dados ruins do usuário, o que você deve esperar. Você só precisa obter as informações de volta à página, para que a página possa ser marcada para dizer ao usuário como corrigir seus dados.
  2. Você também precisa lidar com falhas catastróficas, como exceções imprevistas. Isso é semelhante ao que o HandleRorattribute faz, na medida em que você pode exibir uma mensagem para um usuário, mas você não pode necessariamente corresponder a essa mensagem com campos específicos em sua página.

Para lidar com o primeiro cenário de erro, você precisa envolver o modelo de estado em um objeto que será parsável no código JavaScript; JSON é o ajuste óbvio aqui. Você precisa ter código JavaScript no lado do cliente, que analisa esse objeto e marca os campos do formulário. Isso é mais fácil se você se vincular a uma estrutura de validação do lado do cliente existente, que já contém código para marcar campos de formulário.

Para lidar com o segundo tipo de erro, você pode estender o HandleRorattribute para fornecer JSON em vez de HTML no caso de uma falha catastrófica. Novamente, você precisará escrever código JavaScript que será executado no caso de um fracasso - a JQuery's Global ajaxError O evento é útil aqui - que detecta essas informações de erro estruturado que você criou e exibe algum tipo de mensagem útil para o usuário.

Se tudo isso parece um pouco envolvido, bem, é por isso que pode fazer mais sentido esperar e ver o que será interno quando o MVC 2 for finalmente lançado.

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