Pergunta

Eu não posso conseguir Validação xval Para trabalhar com modelos ViewModels fortemente digitados.

Todo método no XVAL parece querer um prefixo que não é usado ao lidar com o ViewModels fortemente digitado.

Minha visão contém código semelhante a este:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<ContactForm>" %>
<%= Html.TextBox("firstName", Model.FirstName) %>

E o código a seguir vai no controlador:

try
{
    var theModel = form.ToModel();
    _contactRepository.Save(theModel);
}
catch (RulesException ex)
{
    ex.AddModelStateErrors(ModelState, string.Empty); // Passing string.Empty for prefix, since I don't use prefixes.
}

return View(form);

No entanto, o código acima não funciona. Certamente perdi alguma coisa, mas não sei o quê. Esta é a minha primeira vez usando o XVAL.

Agradeço por qualquer ajuda!

Foi útil?

Solução

Eu acho que o problema está no fato de você não usar prefixos. Se você depurar o ModelState, poderá ver as validações para coisas como ".FirstName", embora devam ser como "primeiro nome". Por causa disso, os resumos de validação do lado do cliente não mostram essas mensagens de erro de validação.

Eu acho que isso é um bug no XVAL.

Outras dicas

Para o ponto de Adrian, não podemos ver se você está usando o DataNotações no seu modelo de visualização ou se está usando algum tipo de corredor descrito em Este artigo . Você precisará usar algo como o DataNoTationsValidationRunner que ele menciona para executar a validação em cada propriedade do seu modelo de visualização, conforme especificado pelos atributos de validação que você usa (por exemplo, necessário, faixa etc.).

Basicamente, as etapas seriam:

  1. Recupere seu modelo de visão fortemente atualizado do formulário.
  2. Passe esse modelo para o seu DataAnnotationsValidationRunner, coletando quaisquer erros que resultem
  3. Se houve algum erro (objeto ErrorInfo), jogue -os como um RulesException
  4. Pegue o RulesException e adicione as exceções de validação ao seu modelo usando as exceções AddModelStateErrors método
  5. Verifique se ver se ModelState.IsValid, e se não for, represente sua visão, o que graças ao seu manuseio de exceção agora terá os erros vinculados ao seu modelo de visualização. Você terá que garantir que você tenha o apropriado ValidationMessage As chamadas HTML Helper no lugar, também mencionadas pelo artigo vinculado.

Sua postagem não é concisa o suficiente para eu descobrir o que está dando errado, mas você pode encontrar um site de demonstração totalmente funcional no final de Este artigo do blog. O artigo também descreve tudo o que você precisa fazer passo a passo, portanto, isso deve ajudá -lo a executar o XVAL.

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