You might want to take a look at the MVP pattern. Since you are probably using WebForms, it would be difficult to port MVC to ASP.Net, but you could pretty easily implement MVP in existing applications.
At a basic level, you move all the business logic to the Presenter class, which has a view representing some kind of interface:
public class SomePresenter { public ISomeView View{get; set;} public void InitializeView() {
You define your interface for storing the atomic types you want to display:
public interface ISomeView { String Name {get; set;} IList<Order> Orders{get; set;} }
Once they are defined, you can simply implement the interface in your form:
public partial class SomeConcreteView : System.Web.UI.Page, ISomeView { public SomePresenter Presenter{get; set;} public SomeConcreteView() { Presenter = new SomePresenter();
As you can see, your code behind is currently very simple, so duplicating the code doesn't really matter. Since the core business logic terminates in the DLL anyway, you don’t have to worry about the possibility of exiting synchronization. Presenters can be used in multiple views, so you have high reuse and you can change the interface without affecting the business logic while you stick to the contract.
The same template can be applied to user controls, so you can get as modular as you need. This template also gives you the ability to unit test your logic without having to launch a browser :)
templates and methods the group has a nice implementation: WCSF
However, you do not need to use your infrastructure to implement this template. I know that at first this may seem a bit complicated, but it will solve many of the problems (in my opinion) that you are working on.