5 votes

Comment faire en sorte qu'une page ASP côté serveur affiche un message contextuel dans le navigateur du client ?

J'ai lu des dizaines d'articles sur le fait que l'on ne peut pas utiliser MessageBox.Show à partir d'une page ASP côté serveur. C'est logique. Ces articles préconisaient l'utilisation de "alert" pour faire apparaître un message (comme un message de confirmation, où l'utilisateur doit cliquer sur "OK" pour accuser réception du message). Certains articles parlaient de l'enregistrement du code, mais d'autres non. J'ai essayé toutes les combinaisons possibles, mais je n'arrive toujours pas à faire en sorte que ma page ASP côté serveur affiche un message dans le navigateur de mon client !

Voici un extrait du code de ma page code-behind :

private void MessageBoxShow(Page page, string message)
{
    Literal ltr = new Literal();
    ltr.Text = @"<script type='text/javascript'> alert('" + message + "') </script>";
    page.Controls.Add(ltr);
}

J'ai également essayé cette variante :

protected void MyTrace(string msg)
{
    Response.Write("<script>alert('" + msg + "')</script>");
}

Ces deux méthodes fonctionnent comme prévu si je vais sur l'hôte local, mais lorsque je place mon code sur le serveur (sous IIS 7.5), les messages n'apparaissent jamais.

Quelqu'un peut-il me donner une réponse simple (mais complète) qui fonctionne ? Je vous remercie.

10voto

gilly3 Points 33285

Je trouve les boîtes d'alerte ennuyeuses. Il suffit de créer les vôtres en HTML :

<div runat="server" id="AlertBox" class="alertBox" Visible="false">
    <div runat="server" id="AlertBoxMessage"></div>
    <button onclick="closeAlert.call(this, event)">Ok</button>
</div>

Montrez-le en code :

private void MessageBoxShow(string message)
{
    this.AlertBoxMessage.InnerText = message;
    this.AlertBox.Visible = true;
}

Ajoutez du CSS pour la styliser en tant que fenêtre contextuelle et du JavaScript pour la fermer lorsque l'on clique sur "Ok". Voici une démo complète :

<%@ Page Language="C#" CodeFile="Demo.aspx.cs" Inherits="Demo" %>
<!doctype html>
<html>
    <head runat="server">
        <meta charset="UTF-8" />
        <title>Message Box Demo</title>
        <style type="text/css">
            .alertBox
            {
                position: absolute;
                top: 100px;
                left: 50%;
                width: 500px;
                margin-left: -250px;
                background-color: #fff;
                border: 1px solid #ccc;
                border-radius: 4px;
                box-sizing: border-box;
                padding: 4px 8px;
            }
        </style>
        <script type="text/javascript">
            function closeAlert(e)
            {
                e.preventDefault();
                this.parentNode.style.display = "none";
            }
        </script>
    </head>
    <body>
        <form runat="server">
            <div>
                [Regular page content here]
            </div>
            <div runat="server" id="AlertBox" class="alertBox" Visible="false">
                <div runat="server" id="AlertBoxMessage"></div>
                <button onclick="closeAlert.call(this, event)">Ok</button>
            </div>
        </form>
    </body>
</html>

using System;
using System.Web.UI;

public partial class MessageBoxDemo : Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        MessageBoxShow("Welcome to my website!");
    }

    private void MessageBoxShow(string message)
    {
        this.AlertBoxMessage.InnerText = message;
        this.AlertBox.Visible = true;
    }
}

8voto

Barry Dysert Points 655

Merci à tous pour leur contribution. Il s'avère que la plupart des idées étaient réalisables. Mon problème a été de ne pas me rendre compte que la boîte d'alerte n'apparaissait qu'après la fin de la méthode (ce qui est logique avec le recul). J'ai fini par utiliser la plus simple des idées, à savoir..,

Response.Write("<script>alert('" + msg + "')</script>");

0voto

Chris Lively Points 59564

Si cela fonctionne localement, mais pas sur le serveur, il y a quelques points à vérifier. Par exemple :

  1. Votre navigateur met-il la page en cache ? Effectuez un rafraîchissement complet ( ctrl + F5 ) sur la page et réessayez.
  2. Êtes-vous sûr que le code est déployé ? Cela peut sembler idiot, mais nous devons poser la question. Cette question est accompagnée d'un suivi : Êtes-vous sûr que le code est déployé au bon endroit ?
  3. Obtenez-vous des erreurs javascript ?

0voto

Utilisez ClientScriptManager.RegisterStartupScript pour enregistrer un script de démarrage. Voir la documentation MSDN http://msdn.microsoft.com/en-us/library/asz8zsxy.aspx

0voto

user3061212 Points 86

Je préfère utiliser

Page.ClientScript.RegisterStartupScript(GetType(String), "myScript", "alert('" & s.Replace("'", "'+String.fromCharCode(39)+'") & "')", True)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X