0

私は2つの数字を生成する簡単なウェブサイトを作ろうとしています。そして、ユーザーはこれらの数字の2つを足した正しい結果に答える必要があります。

これは私のASPXです:

<div id="questionContainer">
    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
                <ContentTemplate>  
        <div id="firstNumber">
            <%=firstNum %>
        </div>
        <div id="operator">
            <%=operatorString %>
        </div>
        <div id="secondNumber">
           <%=secondNum %>
        </div>
        <div id="answerWrapper">

                    <input type="text" id="answer" name="answer" placeholder="your answer" />

            <asp:Button runat="server" ID="submit" name="submit" OnClick="AnswerQuestion" Text="Answer" />
              <input type="hidden" name="op" id="op" value="1" />
            <div id="error">
                <%=textForUser %>
            </div>
            </ContentTemplate>
            </asp:UpdatePanel>
        </div>

そして、これはコードビハインドです:

protected static int firstNum;
    protected  static int secondNum;
    protected bool operatorTrueOrFalse = true;
    protected string operatorString = "+";
    protected GameLogic gl;
    protected static int answer;
    protected bool isItTrue;
    protected int userAnswer;
    protected string textForUser ="hello";
    protected string op;

    protected void Page_Load(object sender, EventArgs e)
    {



        if (Page.IsPostBack || op == "1") // if solved X or null.
        {
            gl = new GameLogic();
            firstNum = gl.GenerateNumber(4);

            secondNum = gl.GenerateNumber(4);

            answer = gl.SolveFor(firstNum, secondNum, operatorString);
        }


    }

    public void AnswerQuestion(object sender, EventArgs e)
    {
        if (Request["answer"] != null)
        {
            userAnswer = int.Parse(Request["answer"]);

        }
        else
        {
            textForUser = "You need to type something";
        }


        if (answer == userAnswer)
        { // user has answered correctly.
            isItTrue = true;
            textForUser = "very good";
            op = "1";
        }
        else
        {// user has answered in - correctly.
            isItTrue = false;
            textForUser = "you are wrong";
            op = "0";
        }
    }

問題は、テキストボックスの質問に答えようとするたびに、数字が変わることに気付くということです。正しい質問に答えていないようです。

4

2 に答える 2

3

問題は、静的変数を使用していることです。これらはすべてのリクエストで共有されます。この目的で静的変数を使用するのではなく、他の場所(fe Session、ViewState、Hiddenfield、...)に保存してください。

ASP.NETアプリケーションで永続的なユーザー状態を管理するための9つのオプション

  • 応用
  • クッキー
  • フォーム投稿/非表示フォームフィールド
  • クエリ文字列
  • セッション
  • ASP.NETの新しい状態コンテナー
  • キャッシュ
  • コンテクスト
  • ViewState
  • Web.configおよびMachine.configファイル

...そしてもちろんデータベース。

于 2012-05-11T14:37:41.957 に答える
3

ポストバックで新しい番号ペアを再生成しているようです。基本的に、同じページに繰り返しとどまり、単に回答を投稿することを計画している場合、ロジックはそのようなものでなければなりません。

1) Is this a postback?
   -> No: Generate a new value and store it in ViewState. Hold onto this value.
   -> Yes: Do we have a stored answer value in ViewState?
         -> No: Error? Something has gone wrong.
         -> Yes: Fetch that Value and hold on to it
2) On Button Click, Is the answer you entered the same as the generated value?
   -> No: Show Error
   -> Yes: Show Success, Then generate a new value and store it in ViewState

あなたのアルゴリズムは、ポストバック中とすべてのポストバックでのみ新しい回答ペアを生成しているようです。

于 2012-05-11T14:38:02.067 に答える