none
Error Ajax Jquery não funciona - MVC5 RRS feed

  • Pergunta

  • Galera Bom Dia, 

    Eu havia até deixado pra la mas agora não tenho escapatória. 

    Na minha Modal, eu tenho três Views que vão sendo apresentadas de acordo com cada ação realizada, até ai maravilha. 

    O problema é o seguinte: A minha página é postada utilizando ajax do jquery, ok, funciona parcialmente, porque, quando os campos obrigatórios são preenchidos vai que é uma maravilha mas quando não os erros Required são apresentados, o load é carregado e a view seguinte é apresentada, e o mesmo se dá para essa nova View. 

    Eu debuguei e no retorno do ajax não entra no error de jeito algum. 

    Alguém pode me ajudar? 

    Meu código: 

    @model BaseDeDados.Classes.RestaurarSenha
    @using System.Web.UI.WebControls;
    <script type="text/javascript">
    
        function EnviarEmail() {
            $.ajax({
                type: 'POST',
                url: 'EnviarEmailRecuperarSenhaPartial',
                data: $('form').serialize(),
                beforeSend: function() {
                    $("#panel").fadeIn();
                    CallbackPanel.PerformCallback();
                    //$("#tdCaptchaEmail").fadeOut();
                },
                complete: function() {
                    $("#tdCaptchaEmail").hide();
                },
                success: function(response) {
                    debugger;
                    $("#tbConfirmacaoCodigo").show(200);
                    $("#emailMensagem")[0].textContent = "Se " + email + " corresponder ao endereço de email em sua conta, enviaremos um código para você.";
                    $("#lblEmailOculto")[0].textContent = email;
                },
                error: function(response) {
                    debugger;
                    $("#tdCaptchaEmail").show();
                    $("#tbConfirmacaoCodigo").hide();
                }
            });
        }
    </script>
    <div style="margin- margin-">
        <div id="panel" style="display:none;">
            @Html.Action("CallbackPanelPartial")
        </div>
        @Html.DevExpress().Label(
        labelSettings =>
        {
            labelSettings.ControlStyle.CssClass = "label";
            labelSettings.Text = "Email";
            labelSettings.AssociatedControlName = "Email";
        }).GetHtml()
    
        @Html.DevExpress().TextBoxFor(m => m.Email, textBoxSettings =>
        {
            textBoxSettings.Name = "Email";
            textBoxSettings.ClientEnabled = true;
            textBoxSettings.ControlStyle.CssClass = "editor";
            textBoxSettings.Width = Unit.Pixel(400);
            textBoxSettings.Properties.ValidationSettings.ErrorDisplayMode = ErrorDisplayMode.ImageWithText;
            textBoxSettings.Properties.ValidationSettings.RequiredField.ErrorText = "O Email é obrigatório.";
            textBoxSettings.Properties.ValidationSettings.ErrorTextPosition = ErrorTextPosition.Bottom;
            textBoxSettings.Properties.ValidationSettings.RequiredField.IsRequired = true;
            textBoxSettings.Properties.ValidationSettings.SetFocusOnError = true;
            textBoxSettings.Properties.ValidationSettings.RegularExpression.ValidationExpression = @"^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$";
            textBoxSettings.Properties.ValidationSettings.RegularExpression.ErrorText = "O Email informado é inválido";
    
        }).GetHtml()
    </div>
    <div id="content" style="margin- margin-">
        @Html.Action("RestaurarSenhaCaptchaPartial")
    </div>
    <div style="margin- margin-">
        @Html.DevExpress().Button(settings =>
        {
            settings.Text = "Enviar Email";
            settings.Width = Unit.Pixel(100);
            settings.Name = "btnEnviarEmail";
            settings.ClientSideEvents.Click = "EnviarEmail";
        }).GetHtml()
    </div>

    Minha Action: 

     [AllowAnonymous]
            [HttpPost]
            public ActionResult EnviarEmailRecuperarSenhaPartial(RestaurarSenha model)
            {
                if (CaptchaExtension.GetIsValid("RestaurarSenhaCaptcha"))
                {
                    CadastrarCodigoAlteracaoSenha_Repository repository = new CadastrarCodigoAlteracaoSenha_Repository();
    
                    // Cadastra o código verificador junto ao usuário no banco de dados
                    string random = repository.CadastrarCodigoAlteracaoSenha(model);
    
                    this.EnviarEmail(model.Email, random);
    
                    ViewBag.Email = model.Email.Trim();
                    ModelState.Clear();
                }
    
                return View();
            }

    Imagem do erro: 

    Help me please.


    sexta-feira, 28 de março de 2014 13:44

Respostas

  • success:function(response)

    {

    if(response.IsError)

    {

    //codigo do erro

    }

    else

    {

    //codigo do retorno

    }

    }

     public ActionResult NomeQualquer(int? ActualPage)
            {
                var model = new SolicitacaoModel();

                try
                {
                    using (SolicitacaoAmizadeRepositorio solicitacaoRepositorio = new SolicitacaoAmizadeRepositorio())
                    {
                        model.Resultado = solicitacaoRepositorio.Filtrar(IdUsuarioLogado(), ActualPage);
                    }

                    if (Request.IsAjaxRequest()) 
                    {

    model.IsError = true;

                        return Json(model);
                    }
                }
                catch (Exception ex)
                {
                    base.GravarLog(ex);
                }

                return View(model);
            }

    segunda-feira, 7 de abril de 2014 18:46

Todas as Respostas

  • Galera ainda estou com esse problema e não acho a solução alguem pode me ajudar?
    segunda-feira, 7 de abril de 2014 17:08
  •   $.ajax({
                type: 'POST',
                url: '@HTML.Action("EnviarEmailRecuperaSenhaPartial")',
                data: $('form').serialize(),
    segunda-feira, 7 de abril de 2014 17:20
  •   $.ajax({
                type: 'POST',
                url: '@HTML.Action("EnviarEmailRecuperaSenhaPartial")',
                data: $('form').serialize(),

    Valeu pelo retorno Cesar, mas não funfou... 

    Tentei @Url.Action e o erro continua. 

    E mesmo com a Validação do ModelState ele ainda me retorna no success do $ajax.

    Alguma outra ideia??

    Abraço.


    segunda-feira, 7 de abril de 2014 17:26
  • Foi mal, @URL.Action("EnviarEmailRecuperarSenhaPartial")
    segunda-feira, 7 de abril de 2014 18:22
  • Cesar conforme eu já havia citado eu já tentei @Url.Action e sem sucesso.. 

    O problema maior ai, é que ele não volta para o error e sim para o success. 

    Como eu "forço" ele voltar no error sem utilizar exception?

    Abraço.


    segunda-feira, 7 de abril de 2014 18:24
  • Cara, o error é só para erro interno na chamado ou problema na execução do script, mais fácil você criar uma variavel boleana no success e se for falso você considera erro e faz o que deve ser feito
    segunda-feira, 7 de abril de 2014 18:29
  • Não entendi, sou um tanto quanto noob em $ajax / json ... 

    Como vou validar uma variavel boleana no success ??? 

    Eu ja tentei vários codigos para adiconar mensagens atraves de json na Controller mas nenhuma funcionou ai larguei mao. 

    Alguma dica?

    segunda-feira, 7 de abril de 2014 18:36
  • success:function(response)

    {

    if(response.IsError)

    {

    //codigo do erro

    }

    else

    {

    //codigo do retorno

    }

    }

     public ActionResult NomeQualquer(int? ActualPage)
            {
                var model = new SolicitacaoModel();

                try
                {
                    using (SolicitacaoAmizadeRepositorio solicitacaoRepositorio = new SolicitacaoAmizadeRepositorio())
                    {
                        model.Resultado = solicitacaoRepositorio.Filtrar(IdUsuarioLogado(), ActualPage);
                    }

                    if (Request.IsAjaxRequest()) 
                    {

    model.IsError = true;

                        return Json(model);
                    }
                }
                catch (Exception ex)
                {
                    base.GravarLog(ex);
                }

                return View(model);
            }

    segunda-feira, 7 de abril de 2014 18:46
  • Cara essa solução funcionou pra mim cara ... 

    Mas não existe uma maneira de fazer um tratamento desse tipo sem que eu tenha que ter um campo na minha model(classe) para receber o erro??? 

    Abraço.

    segunda-feira, 7 de abril de 2014 19:57
  • Não que eu conheça
    terça-feira, 8 de abril de 2014 18:55