Если вы используете стандартные веб-формы ASP.Net (т.е. не MVC), я бы использовал элемент управления ListView для того, что вы описываете. Идея состоит в том, что вы указываете LayoutTemplate, ItemTemplate и привязку данных к своему списку.
Я хотел бы избежать WELL, создавая HTML в виде массивных длинных строк и вставляя его в вашу страницу, отладка такого рода вещей не доставляет удовольствия, когда он неизбежно ломается, и, скорее всего, это будет собака производительности. Контроллеры ASP.Net предназначены именно для этой цели и имеют преимущество в тысячах / миллионах человеко-часов разработки и тестирования.
Мое эмпирическое правило заключается в том, что HTML генерируется элементами управления, разработанными для этой цели, а кодовая область предназначена только для установки свойств этих элементов управления.
В общем, для того, что вы описали, я бы использовал LinqToSql или, более вероятно, Entity Framework, чтобы обернуть доступ к моей базе данных. В зависимости от сложности проекта, я могу абстрагироваться от репозитория, но только если это того заслуживает. Контекст Linq / EF представляет собой то, что вы описываете как (1), то есть отдельный класс, отвечающий только за доступ к базе данных.
Я бы тогда использовал элемент управления ListView на странице и связывал его при загрузке страницы.
Например:
<!-- rest of page -->
<asp:ListView ID="ListView_Books" runat="server" ItemPlaceholderID="itemPlaceholder">
<LayoutTemplate>
<ul>
<asp:Placeholder ID="itemPlaceholder" runat="server" />
</ul>
</LayoutTemplate>
<ItemTemplate>
<li>
<%# DataItem.Title %>, by <%# DataItem.Author %>
</li>
</ItemTemplate>
</asp:ListView>
<!-- rest of page -->
Мой код будет иметь что-то вроде (VB):
Protected Sub Page_Load()
ListView_Books_Bind()
End Sub
Protected Sub ListView_Books_Bind()
Dim dataContext As New MyDataContextClass
ListView_Books.DataSource = dataContext.Books
ListView_Books.DataBind()
End Sub
Protected Readonly Property DataItem As Book
Get
Return DirectCast(Page.GetDataItem(), Book)
End Get
End Property
Редактировать - включены комментарии Паули - спасибо!