Подписка на обработчики событий - PullRequest
0 голосов
/ 26 марта 2010

Мне интересно узнать о плюсах и минусах при подписке на обработчики событий.

<asp:DropDownList id="DropDownList1" runat="server" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged" />

против

protected void Page_Init(object sender, EventArgs e)
{
    this.DropDownList1.SelectedIndexChanged += new EventHandler(DropDownList1_SelectedIndexChanged);
}

Ответы [ 2 ]

2 голосов
/ 26 марта 2010

Одно отличие заключается в проверке времени компиляции. Если вы используете декларативный метод и по какой-то причине изменили имя или сигнатуру метода-обработчика, вы не узнаете его, пока страница ASP.NET не обработает страницу. Если вы используете явное связывание в коде позади, вы получите проверку времени компиляции. Чуть стабильнее.

Кроме того, некоторые, вероятно, будут утверждать, что размещение обработчиков событий в разметке противоречит правилам разделения задач. Несмотря на то, что в веб-формах ASP.NET все еще есть немного кроссовера, в отличие от дискретного разделения, найденного в инфраструктуре MVC.

2 голосов
/ 26 марта 2010

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

  • Декларативный подход с использованием разметки 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 - использовать декларативное связывание с обработчиком событий, если только у вас нет веских причин не делать этого (например, как в примере выше).

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