使用定时器回发,使用哪个控制器不回发到服务器?

时间:2010-07-14 07:12:27

标签: c# asp.net button postback

成为ASP.NET的新手我在构建自己的Whack-a-mole计划时遇到了麻烦。我认为我的问题来自于使用按钮,它自己将回发邮件发送到服务器,使软件无法使用。外观很到位,使得新的按钮显示在网格中,在不同的地方随机显示。但是,当按下按钮时 - 分数不会改变(我感觉很奇怪)。

没有那么奇怪的是Button不起作用,因为它将回发送回服务器 - 重新加载UpdatePanel。我想我应该使用一个不同的控制器,如CheckBox,并使用CSS来设置它的样式(这不是问题)。这是正确的方法,还是应该使用JavaScript AJAX?

自我注意:此技术不应在公共应用程序中使用,因为它会对Web服务器施加太多不必要的压力。仅用于测试和学习!

Thanx倾听!

<%@ 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>

摘自代码文件:

// 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;
}

1 个答案:

答案 0 :(得分:1)

您的Points变量在哪里声明?

我认为它可能是Whack_a_mole WebForm类的成员,这就是它不更新的原因。 WebForm的实例仅用于1 Postback,然后被销毁。

但更重要的是,对于像这样的游戏,你应该使用JavaScript或SilverLight。