在.net中按钮事件之前调用页面加载

时间:2015-03-01 22:09:45

标签: c# asp.net event-handling controls postback

我有以下代码:

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

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

当我单击submitAnswers按钮时,将调用页面加载,然后调用按钮事件。我需要一些方法来检查提交的答案,但我目前无法做到这一点,因为我的控件在回发中随着问题及其答案而消失。因此,当事件方法最终被调用时,我只是在没有用户输入的情况下从新问题中检查答案。

我已经查看了其他各种问题,但我找不到类似的问题。

2 个答案:

答案 0 :(得分:2)

你可以在这里找到答案:Which control caused the postback?。但你应该使用!Page.IsPostback检查Page_Load事件。

答案 1 :(得分:1)

您可以在页面循环中的几个点重构您的操作。您可以在ASP.NET page life cycle explanation上阅读更多信息。

在您的情况下,我建议添加Page_PreRender步骤。添加将当前的Page_Load操作移动到它。

所以它会像:

  • 步骤1:调用Page_Load,您可以执行常规操作
  • 第2步:处理按钮点击
  • 第3步:调用Page_PreRender,您可以在其中加载带有问题的动态控件。此时,您可以从数据库重新加载数据。