Используя таймер обратной связи, какой контроллер использовать, чтобы не отправлять обратно на сервер? - PullRequest
0 голосов
/ 14 июля 2010

Будучи новичком в ASP.NET, я столкнулся с проблемами при создании своей собственной программы Whack-a-mole.Я думаю, что моя проблема связана с использованием кнопок, которые сами отправляют сообщения обратно на сервер, что делает программное обеспечение непригодным для использования.Внешний вид на месте, благодаря чему новые кнопки отображаются в сетке, в разных местах случайным образом.Тем не менее, когда кнопка нажата - счет не меняется (что мне кажется странным).

Не так странно, что Button не работает, так как отправляет сообщение обратно на сервер - перезагружает UpdatePanel.Я думаю, что я должен использовать другой контроллер, такой как CheckBox, и стилизовать его с помощью CSS (что не проблема).Это правильный путь, или я должен вместо этого использовать JavaScript AJAX?

Примечание для себя: этот метод не должен использоваться в общедоступном приложении, так как он оказывает слишком большое нежелательное давлениевеб-сервер.Используйте только для тестирования и обучения!

Спасибо за прослушивание!

<%@ 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 Ответ

1 голос
/ 14 июля 2010

Где объявлена ​​ваша переменная Points?

Я думаю, что он может быть членом класса Whack_a_mole WebForm, и поэтому он не обновляется. Экземпляр WebForm используется только для 1 обратной передачи, а затем он уничтожается.

Но что более важно, для такой игры вы должны использовать JavaScript или SilverLight.

...