Если события элемента управления asp.net не являются обязательными, что я должен проверить в порядке вероятности? - PullRequest
1 голос
/ 17 декабря 2009

Итак, у меня есть элемент управления ASP.NET с серверной формой с набором runat="server" с событиями, определенными в разметке. Однако ни одно из событий не происходит, когда я нажимаю на кнопки. Обратная передача происходит и в случае Page_Load IsPostback имеет значение true.

Что я должен проверить, чтобы увидеть, почему события не происходят? Каковы наиболее вероятные причины того, почему они не связаны?

ОБНОВЛЕНИЕ: Я отказался от этого кода. Когда я дошел до того, что проверил все, что упомянуто здесь, все еще возникают постбэки, но события не запускаются, я откатился до предыдущего стабильного состояния и начинаю снова

Ответы [ 4 ]

3 голосов
/ 17 декабря 2009

Это интересный способ снятия шкуры с кошки. Вы спрашиваете не «Что я сделал не так», а «каковы вероятные вещи, которые я мог сделать неправильно».

Интересно, потому что я думаю, что это показывает, что вы хотите понять это сами, но также потому, что мне трудно придумывать предложения, без каких-либо подсказок. Существует почти неограниченное количество возможностей.

Если форма отправляется обратно, событие запускается. Я думаю, что это синоним. Если вы не видите, как вызывается обработчик событий, возможно, вы смотрите не в том месте.

Я считаю этот метод полезным в таких ситуациях. Я вызываю его из page_load, и он показывает мне детали того, что вызвало событие, до того, как будут вызваны обработчики событий.

    /// <summary>
    /// Find which control caused the post back
    /// </summary>
    /// <param name="page"></param>
    /// <returns></returns>
    public static System.Web.UI.Control 
                 GetPostBackControl(System.Web.UI.Page page) {
        Control control = null;
        string ctrlname = page.Request.Params["__EVENTTARGET"];
        if (ctrlname != null && ctrlname != String.Empty) {
            control = page.FindControl(ctrlname);
        }
        // if __EVENTTARGET is null, the control is a button type and we need to 
        // iterate over the form collection to find it
        else {
            string ctrlStr = String.Empty;
            Control c = null;
            foreach (string ctl in page.Request.Form) {
                // handle ImageButton controls ...
                if (ctl.EndsWith(".x") || ctl.EndsWith(".y")) {
                    ctrlStr = ctl.Substring(0, ctl.Length - 2);
                    c = page.FindControl(ctrlStr);
                }
                else {
                    c = page.FindControl(ctl);
                }
                if (c is System.Web.UI.WebControls.Button ||
                         c is System.Web.UI.WebControls.ImageButton) {
                    control = c;
                    break;
                }
            }
        }
        return control;
    }
1 голос
/ 17 декабря 2009

Вы сказали, что происходит PostBack, поэтому вы добавили какую-то форму прерывания / регистрации в событие, которое хотите запустить, и оно никогда не попадет туда?

Вы случайно отключили ViewState?

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

Не видя ваш код в своем элементе управления, вы могли бы связывать события или создавать элементы управления в неправильной точке жизненного цикла страницы, и поэтому событие, которое вы хотите запустить, создается слишком поздно для запуска.

Элемент управления будет работать, поскольку .Net все еще подключает JavaScript-код ClientSide для выполнения PostBack.

Покажите нам свой код, и мы сможем помочь вам в дальнейшем.

Дальнейшее чтение, которое может быть полезно:

MSDN: обзор жизненного цикла страницы ASP.NET

0 голосов
/ 17 декабря 2009

Что я должен проверить, чтобы понять, почему события не срабатывают? Каковы наиболее вероятные причины того, почему они не быть связанным?

  1. Динамические элементы управления, которые создаются и добавляются в дерево элементов управления в Page_Load () или более поздних версиях (должно быть в Page_Init ())
  2. Связывание событий в Page_Load () или позже (должно быть в Page_Init () или из разметки)
  3. Отключение ViewState на странице или в элементе управления
  4. Выполнение некоторых действий в начале жизненного цикла страницы, которые отключают событие или делают его похожим, что оно никогда не происходило
  5. Событие фактически выполняется, вы просто его не видите, потому что ищете какое-то изменение в выводе, а не используете отладчик
0 голосов
/ 17 декабря 2009

Код поможет, но если они создаются динамически, вы могли бы создавать их на неправильной стадии жизненного цикла страницы? Трудно сказать, не увидев пример.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...