none
Passar a mensagem de erro para um ViewBag RRS feed

  • Pergunta

  • Boa tarde,

    Tenho um model "TesteGratuitoViewModel" que contém todas as regras de negócios. 

    Eu sei como identificar de qual campo vem o erro como no exemplo: if (!ModelState.IsValidField("Usuarios_Email"))

    Gostaria de saber como eu passo a descrição do erro de um determinado campo para a ViewBag.MensagemDeErro

    Segue abaixo parte do código da minha aplicação.

    PS: Eu não quero utilizar "@Html.ValidationMessageFor" na view

    TesteGratuitoViewModel:
            
    [Required(ErrorMessage = "Informe o email")]
            [RegularExpression(".+\\@.+\\..+", ErrorMessage = "Informe um email válido...")]
            [Display(Name = "Email")]
            public string Usuarios_Email { get; set; }

    HomeController:
    [HttpPost]
    public ActionResult TesteGratuitoSegundaPagina(TesteGratuitoViewModel testeGratuitoViewModel, string parametroOpcional = "")
            {
    if (!ModelState.IsValidField("Usuarios_Email"))
    {
    ViewBag.MensagemDeErro = ModelState["Usuarios_NomeUsuario"].Value; <<== Só um exemplo de como poderia ser
    return View(testeGratuitoViewModel);
    }
    return RedirectToAction("TesteGratuitoTerceiraPagina", testeGratuitoViewModel);
    }


    • Editado N.SOLUTION terça-feira, 30 de julho de 2019 21:16
    terça-feira, 30 de julho de 2019 20:00

Respostas

  • Boa noite,

    Depois de muito pesquisar descobri a solução ...

    Segue abaixo

    // Analisa regras de negócios
    if (!ModelState.IsValid)
    {
    foreach (var modelErro in ViewData.ModelState["Usuarios_NomeUsuario"].Errors)
    {
    ViewBag.ExibirMensagem = "Sim";
    ViewBag.Mensagem = modelErro.ErrorMessage;
    return View(testeGratuitoViewModel);
    }
    foreach (var modelErro in ViewData.ModelState["Usuarios_Telefone"].Errors)
    {
    ViewBag.ExibirMensagem = "Sim";
    ViewBag.Mensagem = modelErro.ErrorMessage;
    return View(testeGratuitoViewModel);
    }
    }

    • Marcado como Resposta N.SOLUTION quarta-feira, 31 de julho de 2019 00:58
    quarta-feira, 31 de julho de 2019 00:58

Todas as Respostas

  • Como vc esta usando uma validação na model, vc não vai utilizar uma Viewbag, vc vai usar um 
    "Html.ValidationMessageFor".

    Exemplo:

     @Html.ValidationMessageFor(model => model.CEP, "", new { @class = "text-danger" })




    Paulo Marcelo Dalbosco


    terça-feira, 30 de julho de 2019 20:04
  • Obrigado Paulo, utilizar o @Html.ValidationMessageFor ajuda muito, porém neste caso, preciso capturar a mensagem para uma ViewBag, porque vou apresentá-la de forma diferente na View.

    Obrigado novamente...

    terça-feira, 30 de julho de 2019 20:21
  • Boa noite,

    Depois de muito pesquisar descobri a solução ...

    Segue abaixo

    // Analisa regras de negócios
    if (!ModelState.IsValid)
    {
    foreach (var modelErro in ViewData.ModelState["Usuarios_NomeUsuario"].Errors)
    {
    ViewBag.ExibirMensagem = "Sim";
    ViewBag.Mensagem = modelErro.ErrorMessage;
    return View(testeGratuitoViewModel);
    }
    foreach (var modelErro in ViewData.ModelState["Usuarios_Telefone"].Errors)
    {
    ViewBag.ExibirMensagem = "Sim";
    ViewBag.Mensagem = modelErro.ErrorMessage;
    return View(testeGratuitoViewModel);
    }
    }

    • Marcado como Resposta N.SOLUTION quarta-feira, 31 de julho de 2019 00:58
    quarta-feira, 31 de julho de 2019 00:58