Почему методы обработчика событий случайно перестают работать? - PullRequest
0 голосов
/ 26 января 2009

Почему обработчик событий сработает один день, а затем перестанет работать на следующий день без каких-либо изменений кода?

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

<asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_Click">
    Link
</asp:LinkButton>

Я установил точку останова для этого метода, и он никогда не попадал.

protected void LinkButton1_Click(object sender, EventArgs e)
{
    // snip
}

Я пытался очистить решение, перестроить все и т. Д. Здесь есть какие-то идеи?

Edit:

Да, AutoEventWireup имеет значение true. Никаких других изменений системы / среды разработки не было сделано. Я использую .NET 3.5.

Ответы [ 4 ]

1 голос
/ 26 января 2009

Если это приложение .NET 1.1, убедитесь, что в методе OnInit присутствуют ваши обработчики событий. Была ошибка VS.2003, которая иногда удаляла события. Если это приложение 2.0, я видел проблемы с пользовательскими элементами управления, на которые дизайнер жалуется, что они мешают генерации событий в pagename.aspx.designer.cs (или .vb). Проверьте список ошибок и поищите любые предупреждения, в которых «не удалось создать файл конструктора». Это также относится к .NET 3.5.

1 голос
/ 26 января 2009

Я знаю, что вы сказали, что код не изменился, но вы должны проверить, чтобы убедиться, что AutoEventWireup установлен на true на этой странице. Также проверьте web.config, чтобы убедиться, что этот атрибут не false для всего приложения.

Редактировать:

Лучшее, что вы можете сделать, это не полагаться на AutoEventWireup, как вы здесь. Вы действительно должны добавить явное сообщение о событии в переопределение OnInit страницы, поскольку это более четко обеспечивает лучшую производительность. Я не уверен, почему вы видите ошибки, которые вы видите, но я почти гарантирую, что они исчезнут, если вы сделаете что-то вроде этого:

protected override void OnInit(EventArgs e)
{
    this.LinkButton1.Click += new EventHandler(this.LinkButton1_Click);
}
0 голосов
/ 26 января 2009

Киран был прав с его комментарием ... Что-то на самом деле изменилось! Ух ты там ...

Предупреждение о регистрации в TFS оказалось в моей папке с нежелательной почтой, и я не сделал сравнения истории файла. Для коллеги EnableViewState было установлено значение false в заднем коде.

В качестве примечания: он сделал это, потому что он уменьшил размер ответа до 10% от того, что было при включенном viewstate. В итоге я решил ту же проблему, используя переменную querystring вместо обработки события.

Тем не менее, спасибо за все идеи. Хорошо, что я не тратил слишком много времени на эту вещь.

0 голосов
/ 26 января 2009

Ваша папка aspnet_client соответствует версии .NET Framework, установленной на сервере? Если вы используете платформу .NET до версии 2.0, это несоответствие этой версии между платформой и aspnet_client сценариями может вызвать проблемы.

...