С технической точки зрения, между ними нет большой разницы, поэтому речь идет о стиле кодирования и личных предпочтениях. Вот пара моментов, которые вы можете рассмотреть:
- Декларативный подход с использованием разметки ASP.NET обычно короче, и вам не нужен большой метод, который выполняет всю инициализацию
- Если вы инициализируете обработчики в коде позади, вы не загрязняете декларативную разметку аспектами, относящимися только к коду сзади (хотя я не думаю, что это большая проблема)
В некоторых случаях вы можете использовать такие функции, как лямбда-выражения C #, в выделенном фрагменте кода:
protected void Page_Init(object sender, EventArgs e) {
this.btnNext += (s1, e1) => MovePage(this.CurrentPage + 1);
this.btnPrev += (s2, e2) => MovePage(this.CurrentPage - 1);
// ...
}
Нечто подобное может сократить количество одноцелевых методов обработки событий, которые вам нужно написать, что должно упростить выделение кода.
Однако я думаю, что общая рекомендация для простых приложений ASP.NET - использовать декларативное связывание с обработчиком событий, если только у вас нет веских причин не делать этого (например, как в примере выше).