Проблема жизненного цикла страницы ASP.net - PullRequest
0 голосов
/ 15 апреля 2011

Я понимаю жизненный цикл страницы ASP.net, я понимаю, что когда я нажимаю кнопку, она сначала перезагружает страницу, а затем выполняет код для моей кнопки.У меня вопрос, как мне получить его, чтобы я мог что-то установить до того, как этот процесс произойдет.Я пытаюсь передать переменную, по которой была нажата кнопка, но из-за жизненного цикла страницы она никогда не получает это.Что я могу сделать, чтобы определить, что эта кнопка была нажата, может быть, я слишком обдумываю это или даже недоумеваю.

Загрузка страницы:

        ImageButton btn = (ImageButton)(Page.FindControl("displayYImgBtn"));
        if (btn != null)
        {
            string state = btn.CommandArgument;
            if (state == "true")
            {
                search();
                btn.CommandArgument = "false";
            }
        }

Кнопка:

    ImageButton btn = (ImageButton)(sender);
    btn.CommandArgument = "true";

Ответы [ 4 ]

3 голосов
/ 15 апреля 2011

Вы всегда можете проверить переменные записи напрямую. Если была нажата кнопка отправки, она будет иметь значение в коллекции Request.Form, если она не является обратной передачей или какой-либо другой элемент управления вызвал обратную передачу, она не должна отображаться.

1 голос
/ 15 апреля 2011

Существует множество способов решения этой проблемы.

  • Поместите код Page_Load на OnPreRender. Это произойдет после RaisePostBackEvent, поэтому гарантируется, что нажатие любой кнопки уже было обработано. Важно отметить, что в зависимости от того, что вы собираетесь там делать, это может не сработать. Некоторые компоненты не принимают некоторые изменения свойств в таком более позднем событии. Это рекомендуемый подход, если он работает.
  • Создайте на вашей кнопке новое событие, которое срабатывает при изменении CommandArgument в ImageButton. Затем в Page_Load создайте обработчик для события новой кнопки и поместите туда код, который в вашем примере находится в Page_Load. Использование этого подхода приведет к тому, что эта обработка произойдет до OnPreRender
0 голосов
/ 15 апреля 2011

В конфигурации веб-форм Asp.Net щелчок ImageButton должен инициировать событие типа ImageButton_OnClick. Либо в вашей разметке, либо в методе события Page_Init вам необходимо подключить этот обработчик события:

В разметке:

<asp:imagebutton click="ImageButton_Onclick" runat="server" id="displayYImgBtn" />

В коде позади:

public void Page_Init() {
   displayYImgBtn.Click += ImageButton_OnClick;
}

В любой модели ваша кнопка должна быть создана, а ваш метод должен выполняться при обратной передаче (при нажатии кнопки).

Если вы хотите установить другую конфигурационную информацию до того, как будет инициировано событие нажатия кнопки, вам нужно будет сделать это во время события Page.Load или Page.Init. Независимо от того, когда вы решите обратиться к своему элементу управления и установить переменные, вы НЕ должны изменять его каким-либо образом по сравнению с состоянием, в котором оно было отправлено обратно. Если кнопка ImageButton не отформатирована точно, как это было раньше, вы не получите событие обратной передачи.

0 голосов
/ 15 апреля 2011

Полагаю, это зависит от того, что еще происходит в вашем событии Page_Load.

Если эта переменная устанавливается в page_load, вы можете заключить ее в:

If(!Page.IsPostback) {
   // only execute when the page first loads
}

И просто иметь событие OnClick для вашего ImageButton

...