В asp.net есть такой тип проекта WebSite. Он отличается от WebApplication тем, что проектный сайт не создается, любой попавшый в папку файл добавляется в сайт, и самое главное - сайт не собирается в отдельную сборку. На продакшн сайт можно добавлять новые странички не компилируя их (ну есть конечно же предкомпиляция сайта, но см. далее). Каждая страничка компилируется через iis сервер в собственную сборку с рандомным именем. Как это разруливает сервер - загадка.
Для простой логики где все находится в пределах одной страницы все окей, а вот когда требуется вызвать код находящийся на другой страничке - начинаются проблемы: одна страничка ничего не знает о другой (т.к. находится в собственной сборке). Обычное решение - выносить такой нужный код в отдельную собственную сборку, типа библиотеки, закинуть ее в bin директорию сайта, подключать ее в страничках сайта и использовать в коде. Хорошо то оно хорошо. А что делать если ну никак не хочется выносить одну единственную функцию в библиотеку, код которой нужен только на одной единственной страничке?
Пример - нужно реализовать bind грида через object data source, и не через что-либо иное (такое может понадобится для использования фишек грида типа редактирования, удаления в табличке, сортировки, пейджинга и т.п.). Проблема сводится к тому что в SelectMethod нужно написать имя метода, в SelectParameters - параметры, а в TypeName - полное название типа где находится метод. А класс лежит в своей собственной сборке, а имя генерируется рандомно. Единственное решение проблемы - динамически заполнять поле TypeName на этапе загрузки страницы. Вот финальный код:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="myprojectclass.aspx.cs" Inherits="myprojectclass" %>
<asp:GridView ID="gridView1" runat="server" DataSourceID="objectDataSource1" AutoGenerateColumns="True" />
<asp:ObjectDataSource ID="objectDataSource1" runat="server" SelectMethod="GetData" TypeName="" ></asp:ObjectDataSource>
public partial class myprojectclass : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
// ...
objectDataSource1.TypeName = String.Format("{0}, {1}", this.GetType().FullName, this.GetType().Assembly);
gridView1.DataBind();
}
public System.Collections.Generic.List<DataItem> GetData() {
// ...
}
}
Повторюсь - это будет работать в пределах одной страницы, код другой странички получить не получится. Только через собственную сборку. Выводы: 1. никогда не использовать WebSite 2. использовать только WebApplication - так как все получается логично и понятно 3. По возможности никогда не использовать ASP.NET - есть другие более удобные инструментарии веб-разработки
