R – ASP.NET: Code behind or no code behind

asp.netasp.net-3.5netseparation-of-concerns

Why would anyone want to not use a code behind file so that server sided code is separated from markup? Wasn't that supposed to be one of the advantages of .NET over classic ASP?

Personally, I think mixing code with markup makes the code a lot harder to understand.

I hate to see those darn <% %> (server sided blocks) inter-spliced in with markup, yuck. I would expect that this is in ASP.NET solely for backward compatibility with Classic ASP but I see examples from MS all the time that include those yellow brackets.

I am trying to understand a code example which is available for download here and puzzled at why any of my server-sided breaks shown here don't break when executing the code even though I see that has been set in the web.config. Since I usually work with code-behinds, I am wondering if there is something about server-side code in the aspx that is handled differently that is preventing me from debugging the runat=server code.

So. My questions are:

1) Why would anyone want to not use a code behind file so that server sided code is separated from markup?

2) Why might I not be able to break on the server sided logic?

Your insight and opinions are also welcomed on any of my related comments.

Best Answer

The inline code ability using <% %> is not just for backward compatibility, but a feature of .NET that can allow for some (relatively!) clear and straightforward solutions. It is however often used in a less than ideal way. Likewise, code in the code-behind if often (usually in fact) used in a less than ideal way, as are web-controls.

Having code in the code-behind typically does not serve to separate concerns, but to have jumbled spaghetti code in a different place than we had it in classic asp. .NET does allow you to have very well organized solutions, but it's up to you to make it happen. Having code in code behind pages is not the first step in that journey, just where that journey can begin.

As to why your events are not firing, most likely:

  • The event is not actually being triggered. (Are you changes the selected item in the drop-down list, to actually trigger that event?)
  • You do not actually have the event wired up. In the properties window for that control, is the event function name listed corresponding to the event in question? (this is the most straightforward way; you can also use the handles keywork in vb, for example)
  • Often when my events are not firing, it because I'm doing something stupid like not having started my code, or my url is pointing to the wrong place.