Extensão ActionResult para criar Mensagens Modal em sua aplicação com Bootstrap em Asp.Net MVC com C#(CSharp)

Autor : Antonio Carlos Ferreira de Azevedo
Postado em : 07/07/2016


Mensagem Modal


Importante!!! Necessita do Framework BootStrap para funcionar.

Para que nossa aplicação tenha uma aparência profissional precisamos nos preocupar com a maneira com que interagimos com nossos usuários, a aparência é tudo, com o uso do framework Bootstrap podemos criar caixas de dialogo modal bem mais bonitas que as caixas de dialogo alert() de nosso JavaScript, veja a aparência final :

Mensagem padrão somente com botão OK

Mensagem Modal

Mensagem de confirmação com botão Sim e Não

Mensagem Modal

Preparando nossa aplicação

Nosso primeiro passo e criar nossa ActionResultExtensions para podermos integrar a função Mensagem em nossa View.

Crie uma classe com o nome de MensagemActionResultExtensions.cs na pasta Model de sua aplicação copie e cole o código abaixo:

Código Classe para extensão da ActionResult

/* 
 * Atributo para Extensao ActionResult gerando uma Mensagem em uma View 
 * 
 * Necessario Framework Bootstrap para exibição das Mensagens (Importante)
 * 
 * Chamada em seu Controller : 
 *   -- > View().Mensagem("Mensagem","Titulo");
 * 
 * Visite nossa página http://www.codigoexpresso.com.br
 * 
 */

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;


public static class ActionResultExtensions
{
    /// <summary>
    /// Redireciona para uma ActionResult retornando uma mensagem de confirmação para a View
    /// </summary>
    /// <param name="actionResult"></param>
    /// <param name="mensagem">Mensagem a ser exibida</param>
    /// <param name="titulo">titulo a ser exibido, sendo omitido apresenta defaut 'Atenção'</param>
    /// <returns></returns>
    public static ActionResult Mensagem(this ActionResult actionResult, string mensagem, string titulo = "Atenção")
    {
        return new TempDataActionResult(actionResult, mensagem, titulo);
    }
}

public class TempDataActionResult : ActionResult
{
    private readonly ActionResult _actionResult;
    private readonly string _mensagem;
    private readonly string _titulo;

    public TempDataActionResult(ActionResult actionResult, string Mensagem, string Titulo)
    {
        _actionResult = actionResult;
        _mensagem = Mensagem;
        _titulo = Titulo;
    }

    public override void ExecuteResult(ControllerContext context)
    {
        context.Controller.TempData["Mensagem"] = _mensagem;
        context.Controller.TempData["Titulo"] = _titulo;
        _actionResult.ExecuteResult(context);
    }
}


Feito isso precisamos registrar nossa Extensão, copie o código abaixo e cole dentro do método Application_Start() em nosso Global.asax.cs.

Registrando nossa ActionResultExtensions

 // Extensão Mensagem para ActionResult
ClientDataTypeModelValidatorProvider.ResourceClassKey = "Mensagens";
DefaultModelBinder.ResourceClassKey = "Mensagens";


Agora só falta o HTML e o JavaScript responsável por montar nossa mensagens na tela, crie um arquivo com o nome _Mensagem.cshtml na pasta Views/Shared de seu projeto copie e cole o codigo abaixo.

HTML e JavaScript para montagem das mensagens

<!--   
    Html e Script para gerar Mensagens Modal com uso do Bootstrap em sua Aplicação

      * Carrega Mensagem quando chamada como extensão de sua view
      * Funcão MensagemvConfirma - Gera Modal com mensagem de confimação

    Visite http://www.codigoexpresso.com.br
-->

@{
    var Mensagem = "";
    var Titulo = "";
    if (TempData["Mensagem"] != null)
    {
        Mensagem = TempData["Mensagem"].ToString();
        Titulo = TempData["Titulo"].ToString();
    }
}

@if (Mensagem != "")
{
    <!--Formulario principal para Display de Mensagens /Views/shared/_Mensagem.cshtml-->
    <div id="ModalMensagem" class="modal fade">
        <div class="modal-dialog">
            <div class="modal-content">
                <div class="modal-header">
                    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
                    <h4 class="modal-title">@Titulo</h4>
                </div>
                <div class="modal-body">
                    <div class="row">
                        <div class="col-md-12 text-center">
                            @Html.Raw(Mensagem)
                        </div>
                    </div>
                </div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-sm btn-default" data-dismiss="modal">OK</button>
                </div>
            </div>
        </div>
    </div>

    <script type="text/javascript">
    $(document).ready(function () {
        $("#ModalMensagem").modal('show');
    });
    </script>
    
    <!--Fim Formulario principal para Display de Mensagens -->
}

<!--Formulario principal para Display de Mensagem de Confirmação /Views/shared/_Mensagem.cshtml-->

<div id="ModalConfirma" class="modal fade">
    <div class="modal-dialog">
        <div class="modal-content" id="BodyConfirma">
            <!--Conteudo Dinamico-->
        </div>
    </div>
</div>

<script type="text/javascript">

    // Funcao para Carregar Mensagem de confirmação, se teclar no botão SIM desvia para o link informado
    function MensagemConfirma(Titulo, Mensagem, Link)
    {
        var data ='<div class="modal-header">'+
                  '<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>'+
                  '<h4 class="modal-title">'+Titulo+'</h4>'+
                  '</div>'+
                  '<div class="modal-body">'+
                  '<div class="row">'+
                  '<div class="col-md-12 text-center">'+Mensagem+'</div>'+
                  '</div>'+
                  '</div>'+
                  '<div class="modal-footer">'+
                  '<button type="button" class="btn btn-sm btn-default" data-dismiss="modal">Não</button>' +
                  '<a href="'+Link+'" class="btn btn-sm btn-default">Sim</a>'+
                  '</div>'; 
        $('#BodyConfirma').html(data);
        $("#ModalConfirma").modal('show');
    }

    // Funcao para Carregar Mensagem
    function Mensagem(Titulo, Mensagem) {
        var data = '<div class="modal-header">' +
                  '<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>' +
                  '<h4 class="modal-title">' + Titulo + '</h4>' +
                  '</div>' +
                  '<div class="modal-body">' +
                  '<div class="row">' +
                  '<div class="col-md-12 text-center">' + Mensagem + '</div>' +
                  '</div>' +
                  '</div>' +
                  '<div class="modal-footer">' +
                  '<button type="button" class="btn btn-sm btn-default" data-dismiss="modal">OK</button>' +                  
                  '</div>';
        $('#BodyConfirma').html(data);
        $("#ModalConfirma").modal('show');
    }

</script>

<!--Fim Formulario principal para Display de Mensagem de Confirmação -->


Agora é só carregar o arquivo de mensagens em suas páginas ou diretamente em seu layout, utilize os Helpers do Razor para isso conforme abaixo, ele deve ser carregado depois do carregamento do BootStrap no final de sua página.

Carregando o HTML de nossas mensagens

 @{Html.RenderPartial("~/Views/Shared/_Mensagem.cshtml");}


Exemplos de uso das mensagens

Carregando em seu Controller

public ActionResult Confirma(int id)
{
      if (id == 1)
      {
          return RedirectToAction("Sobre", "Home").Mensagem("Registro Apagado com Sucesso !","Atenção");
      }
      else
      {
         return RedirectToAction("Sobre", "Home").Mensagem("Impossível apagar o registro selecionado !", "Atenção");
       }

       return View().Mensagem("Ocorreu algo inesperado, Consulte o responsável pelo Sistema","Erro");
}

Seu Modal Mensagem será carregado junto com a página chamada.

Carregando com uso de botões

<button type="button" class="btn btn-sm btn-default" onclick="MensagemConfirma('Confirme ?','Deseja apagar dados do Cliente 2 ?','@Url.Action("Confirma", "Home", new { id = 2 })')">Apaga Cliente 2</button>
<button type="button" class="btn btn-sm btn-default" onclick="MensagemConfirma('Confirme ?','Deseja apagar dados do Cliente 1 ?','@Url.Action("Confirma", "Home", new { id = 1 })')">Apaga Cliente 1</button>  
<button type="button" class="btn btn-sm btn-default" onclick="Mensagem('Atenção','Informe os dados corretamente !')">Mensagem</button> 


Carregando em seu JavaScript

<script> 
  function VerificaNomeCliente(Nome)
  {
     if (Nome=='')
     {
        Mensagem('Digite o nome do Cliente','Atenção');
        return false;
    }
    return true;
</script>



Se você não sabe como integrar o Twitrer Bootstrap com sua aplicação Asp.Net MVC visite nossa postagem abaixo :





Comentários

Antonio Azevedo (Administrador) em 14/05/2020 21:09:24
 

Obrigado por seu comentário.

Nunca usei em funcionalidades web, mesmo quando o aplicativo é rodado em mobile, acredito que o que quer fazer seria meio complicado, no momento estou com o tempo bem corrido, fique a vontade, se melhorar o código será bem vindo para publicarmos a atualização, estou tendo de estudar Flutter, por isso vou ficar devendo esta pesquisa.


Joao Benevides Costa Spagnol em 12/04/2020 13:34:29
 

Ola Caro Amigo , Gostaria de saber se posso no mesmo exemplo mudar o mesmo para que eu use a opcao toast notification , e como eu varia isto ?

Obrigado