0 votes

En utilisant un Timer post back, quel contrôleur utiliser qui ne renvoie pas de message au serveur ?

Étant nouveau dans le domaine de l'ASP.NET, j'ai eu des difficultés à construire mon propre programme Whack-a-mole. Je pense que mon problème vient de l'utilisation de boutons qui, à eux seuls, envoient des messages au serveur, rendant le logiciel inutilisable. Les apparences sont en place, faisant apparaître de nouveaux boutons dans la grille, à différents endroits au hasard. Cependant, lorsqu'on appuie sur un bouton, le score ne change pas (ce qui me semble étrange).

Ce qui n'est pas si étrange, c'est que le bouton ne fonctionne pas puisqu'il renvoie le message au serveur - ce qui recharge le panneau de mise à jour. Je pense que je devrais utiliser un contrôleur différent, comme la CheckBox, et le styliser en utilisant le CSS (ce qui n'est pas un problème). Est-ce la bonne façon de procéder, ou dois-je plutôt utiliser JavaScript AJAX ?

Note à soi-même : Cette technique ne devrait pas être utilisée dans une application publique car elle met trop de pression indésirable sur le serveur web. A n'utiliser qu'en test et en apprentissage !

Merci de m'avoir écouté !

<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" 
    AutoEventWireup="true" CodeFile="Whack-a-mole.aspx.cs" 
    Inherits="Whack_a_mole" %>

<asp:Content ID="Content" ContentPlaceHolderID="cphContent" runat="server">
            <h1>Whack-a-Mole</h1>

    <asp:ScriptManager ID="smgrTime" runat="server" />
    <asp:Timer ID="Timer" OnTick="Timer_Tick" runat="server" Interval="2000" />
    <asp:UpdatePanel ID="updpButtons" runat="server" UpdateMode="Always">
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="Timer" />
        </Triggers>

        <ContentTemplate>
            <asp:Label ID="lblPoints" runat="server" Text="Score: 0p" />
            <asp:Button ID="Button1" runat="server" BorderStyle="Outset"
                BorderWidth="3px" CssClass="mole" Text="Mole" 
                onclick="Button1_Click" />
            <asp:Button ID="Button2" runat="server" BorderStyle="Outset"
                BorderWidth="3px" CssClass="mole" Text="Mole" 
                onclick="Button2_Click" />
            <asp:Button ID="Button3" runat="server" BorderStyle="Outset"
                BorderWidth="3px" CssClass="mole" Text="Mole" 
                onclick="Button3_Click" />

            <!-- continues the same way down to Button25 -->

            <asp:Button ID="Button25" runat="server" BorderStyle="Outset"
                BorderWidth="3px" CssClass="mole" Text="Mole" 
                onclick="Button25_Click" />
        </ContentTemplate>
    </asp:UpdatePanel>

</asp:Content>

Extrait du fichier Code :

// points vairable
private int points;

// Property for points
public int Points
{
    get { return points; }
    set { points = value; }
}

protected void Timer_Tick(object sender, EventArgs e)
{
    Random random = new Random();
    int visible;

    foreach (Button button in buttonList)
    {
        visible = random.Next(1, 10);
        if (visible == 3)
            button.Visible = true;
        else
            button.Visible = false;
    }
    lblPoints.Text = "Score: " + Points + " p";
}

protected void Button1_Click(object sender, EventArgs e)
{
    Points = Points + 1;
}

1voto

Henk Holterman Points 153608

Où est déclarée votre variable Points ?

Je pense qu'il s'agit peut-être d'un membre de la classe WebForm Whack_a_mole et que c'est pour cela qu'il ne se met pas à jour. L'instance du WebForm n'est utilisée que pour un postback, puis elle est détruite.

Mais plus important encore, pour un jeu comme celui-ci, vous devriez utiliser JavaScript ou SilverLight.

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