Page Load being called before Button Event in .net

你说的曾经没有我的故事 提交于 2021-01-28 01:50:47

问题


I have the following code:

protected void Page_Load(object sender, EventArgs e)
    {
        //get questions
        List<Question> questions = Question.GetQuestionsForTesting();

        //for each question
        foreach (Question currQuestion in questions)
        {
            //display the questionAnswer control
            QuestionAnswer newControl = (QuestionAnswer)LoadControl("~/Account/QuestionAnswer.ascx");
            newControl.newQuestion = currQuestion;
            questionAnswerPanel.Controls.Add(newControl);
        }
    }

    protected void submitAnswers_Click(object sender, EventArgs e)
    {
        //for each control
        foreach (QuestionAnswer questionAnswerControl in questionAnswerPanel.Controls)
        {
            //get ID of question and correct/incorrect
            Tuple<Boolean, int> correctIncorrectANDquestionID = questionAnswerControl.isAnswerCorrect();
            //save in DB
        }
    }

and

<asp:Panel runat="server" ID="questionAnswerPanel"></asp:Panel>
<asp:Button runat="server" ID="submitAnswers" OnClick="submitAnswers_Click" Text="Submit Answers"/>

When I click the submitAnswers button the page load gets called and then the button event. I need some way of checking the answers submitted but I am not able to do this currently as my controls disappear on the postback along with the questions and their answers. So when the event method finally gets called I am just checking answers from new questions with no user input.

I have looked at various other questions but I can't find a similar question.


回答1:


You can find the answer here: Which control caused the postback?. But you should use !Page.IsPostback check in the Page_Load Event.




回答2:


You can restructure your actions on several point in the page cycle. You can read more info on ASP.NET page life cycle explanation.

In your situation I would recommend to add the Page_PreRender step. Add move your current Page_Load actions to it.

So it will be like:

  • Step 1: Page_Load is called, where you can do general actions
  • Step 2: Button Clicks are processed
  • Step 3: Page_PreRender is called, where you can load the dynamic controls with questions. At this point you can reload the data from database.


来源:https://stackoverflow.com/questions/28799750/page-load-being-called-before-button-event-in-net

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!