Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Lucas K

Gerar javascript com um helper no razor

Recommended Posts

Bom dia galera!

Estou com o seguinte problema, estou fazendo um Helper para gerar um bloco javascript, este bloco contem duas funções "OnSuccess" e "OnFailure" que seriam chamadas apos uma requisição ajax, a ideia é usar essas funções para exibir mensagens de sucesso ou falha para o usuário.

 

O script seria este aqui, porem meu Helper gera ele de forma customizada e reutilizável


 

<script>
    function OnSuccess() {
        $("#targetmessage").hide()
        $("#targetmessage").empty()
        $("#targetmessage").append("<div class='alert alert-success'>Tipo de ocorrencia cadastrado com sucesso!</div>")
        $("#targetmessage").fadeIn(1000)
        $("#targetmessage").fadeOut(4000)
    }
    function OnFailure(ajaxContext) {
        $("#targetmessage").hide()
        $("#targetmessage").empty()
        $("#targetmessage").append("<div class='alert alert-error'>Falha no cadastro do tipo de ocorrencia!</div>")
        $("#targetmessage").fadeIn(1000)
        $("#targetmessage").fadeOut(4000)
    }
</script>

 


o unico problema é que na saida do helper na minha view ele gera como um texto html e aparece na tela, ou seja não é interpretado como script.

 

Esta é a saida do meu helper, onde na variavel script contem uma string com todo o script gerado acima.

return MvcHtmlString.Create(script);


Na view onde uso o helper ele é usado assim


 

@Html.Meuhelper(parametros)).ToHtmlString()

 


e já tentei assim também


 

@Html.Meuhelper(parametros)).ToString()

 


Alguém ai pode me dizer como se gera corretamente um javascript com um helper no razor?

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Resolvido.. mudei a forma de gerar o script dentro do helper e ficou desta forma

        public static MvcHtmlString MeuHelper(this HtmlHelper htmlHelper, string targetId, AjaxMessageUserConfig config)
        {
            
            #region script
            StringBuilder sb = new StringBuilder();
            sb.Append("<script language='javascript'>");
            sb.Append("function OnSuccess() {");
            sb.AppendFormat("$('#{0}').hide();", targetId);
            sb.AppendFormat("$('#{0}').empty();", targetId);
            sb.AppendFormat("$('#{0}').append(\"{1}\");", targetId, config.messageOnSuccess);
            sb.AppendFormat("$('#{0}').fadeIn(1000);", targetId);
            sb.AppendFormat("$('#{0}').fadeOut(4000);", targetId);
            sb.Append("}");
            sb.Append("function OnFailure() {");
            sb.AppendFormat("$('#{0}').hide();", targetId);
            sb.AppendFormat("$('#{0}').empty();", targetId);
            sb.AppendFormat("$('#{0}').append(\"{1}\");", targetId, config.messageOnFailure);
            sb.AppendFormat("$('#{0}').fadeIn(1000);", targetId);
            sb.AppendFormat("$('#{0}').fadeOut(4000);", targetId);
            sb.Append("}");
            sb.AppendFormat("</script>");
            #endregion

            return MvcHtmlString.Create(sb.ToString());
        }

 

E na saida do helper dentro da view não estou mais usando como antes

//Forma anterior
@Html.Meuhelper(parametros)).ToString()
@Html.Meuhelper(parametros)).ToHtmlString()

 

 

Agora estou retornando direto ..

 

@Html.Meuhelper(parametros))

 

E esta funcionando certinho!

 

OBS: Antes estava faltando ";" no final de cada comando javascript gerado e também tive que ajustar as aspas que acabavam dando conflito com o conteúdo que ia no ".Append", então ficou assim .append(\"{1}\") com os caracteres de escape.

 

Se alguem estiver a mesma dúvida ta ai.. abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.