none
Registrar script e depois redirecionar para outra tela RRS feed

  • Pergunta

  • Eu tenho uma solução na seguinte estrutura :

    Uma página que contém 1 iframe;
    Dentro do Iframe é todo meu sistema que tem uma MasterPage e várias páginas abaixo desta MasterPage;
    Na MasterPage eu tenho o ScriptManager e as páginas abaixo da MasterPage eu tenho updatepanel em cada uma.
    Eu tenho uma classe genérica com o seguinte método:

       public static void MessageBox(System.Web.UI.Page Pag, System.Type Type, String strTitulo, string strMensagem, enumTipoMensagem enumTipo)
        {
            try
            {
                StringBuilder strBuilder = new StringBuilder();
                strMensagem = strMensagem.Replace("'", "").Replace(System.Environment.NewLine, "").Replace("\"", "");
    
                strBuilder.AppendLine("<script type='text/javascript'>");
                strBuilder.AppendLine("GeraMessageBox('" + strMensagem + "','" + strTitulo + "','" + enumTipo + "');");
                strBuilder.AppendLine("</script>");
    
                ScriptManager.RegisterStartupScript(Pag, Type, Guid.NewGuid().ToString(), strBuilder.ToString(), false);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
    Sempre que ocorre um erro ou querer dar uma mensagem ao usuário, chamo o método que executa um javascript onde monta um messagebox (com div ' s , labels, imagens). Este messagebox é monta na página principal para evitar que nos postback´s a mensagem suma, pois como está fora do iframe somente o que está dentro que atualiza.

    Funciona perfeitamente este cenário acima. Meu problema é o seguinte , quando eu clico em salvar um registro de alguma página , eu executo o método que cria a messagebox alertando o usuário que foi salvo com sucesso e , em seguida, redireciono imediatamente o usuário para outra página. Sempre que eu chamo o método e logo depois redireciono , o javascript não é executado e a mensagem não é gerada.

    Já procurei e não encontrei em qualquer lugar uma solução.

    terça-feira, 20 de maio de 2014 22:00

Respostas

  • Olá Guathan,

    Oque tu pode fazer é justamente criar um método com a finalidade de exibir a mensagem e redirecionar o usuário. Pois ao usar do Response.Redirect() tudo que seria despejado para a atual pagina (output) é perdido, logo o seu MessageBox também se perde.

        public static void MessageBoxAndRedirect(System.Web.UI.Page Pag, System.Type Type, String strTitulo, string strMensagem, enumTipoMensagem enumTipo, string pagina)
        {
            try
            {
                StringBuilder strBuilder = new StringBuilder();
                strMensagem = strMensagem.Replace("'", "").Replace(System.Environment.NewLine, "").Replace("\"", "");
    
                strBuilder.AppendLine("<script type='text/javascript'>");
                strBuilder.AppendLine("GeraMessageBox('" + strMensagem + "','" + strTitulo + "','" + enumTipo + "'); window.location='" + Request.ApplicationPath + pagina "'");
                strBuilder.AppendLine("</script>");
    
                ScriptManager.RegisterStartupScript(Pag, Type, Guid.NewGuid().ToString(), strBuilder.ToString(), false);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

    Você deixaria de usar o Response.Redirect() do C#.

    //Response.Redirect("Pagina.aspx"); << Not
    MessageBoxAndRedirect(this, typeof(this), "abc", "sucesso", seuEnum.Enum, "Pagina.aspx");



    Vitor Mendes | http://www.vitormendes.com.br/

    "Ajuda teu semelhante a levantar a sua carga, porém, não a carregá-la." (Pitágoras)

    quarta-feira, 21 de maio de 2014 12:51

Todas as Respostas

  • Olá Guathan,

    Oque tu pode fazer é justamente criar um método com a finalidade de exibir a mensagem e redirecionar o usuário. Pois ao usar do Response.Redirect() tudo que seria despejado para a atual pagina (output) é perdido, logo o seu MessageBox também se perde.

        public static void MessageBoxAndRedirect(System.Web.UI.Page Pag, System.Type Type, String strTitulo, string strMensagem, enumTipoMensagem enumTipo, string pagina)
        {
            try
            {
                StringBuilder strBuilder = new StringBuilder();
                strMensagem = strMensagem.Replace("'", "").Replace(System.Environment.NewLine, "").Replace("\"", "");
    
                strBuilder.AppendLine("<script type='text/javascript'>");
                strBuilder.AppendLine("GeraMessageBox('" + strMensagem + "','" + strTitulo + "','" + enumTipo + "'); window.location='" + Request.ApplicationPath + pagina "'");
                strBuilder.AppendLine("</script>");
    
                ScriptManager.RegisterStartupScript(Pag, Type, Guid.NewGuid().ToString(), strBuilder.ToString(), false);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

    Você deixaria de usar o Response.Redirect() do C#.

    //Response.Redirect("Pagina.aspx"); << Not
    MessageBoxAndRedirect(this, typeof(this), "abc", "sucesso", seuEnum.Enum, "Pagina.aspx");



    Vitor Mendes | http://www.vitormendes.com.br/

    "Ajuda teu semelhante a levantar a sua carga, porém, não a carregá-la." (Pitágoras)

    quarta-feira, 21 de maio de 2014 12:51
  • Perfeito Vitor Mendes, resolveu o meu problema.
    quinta-feira, 22 de maio de 2014 15:10