Тип, указанный в свойстве TypeName ObjectDataSource, не найден

Из-за требований все файлы.cs веб-сайта хранятся в каталоге App_Code и компилируются в App_Code.dll. При попытке получить доступ к одной конкретной странице сайта возникает ошибка.

Description: An unhandled exception occurred during the execution
of the current web request. Please review the stack trace for more
information about the error and where it originated in the code. 

Exception Details: System.InvalidOperationException: The type
specified in the TypeName property of ObjectDataSource
'DataSourceSubmissionList' could not be found.

У меня есть элемент управления Gridview, который заполняется ObjectDataSource. Код ниже:

/layouts/Portal/Company/Application/code.ascx:

<%@ Control Language="c#" AutoEventWireup="true"
CodeFile="~/layouts/Portal/Company/Application/code.ascx.cs"
Inherits="Project.WebUserControls.myapplications.sublayout" %>

<dx:ASPxGridView ID="ASPxGridView1"
  runat="server"
  DataSourceID="DataSourceSubmissionList"
  KeyFieldName="SubmissionId"
</dx:ASPxGridView>

<asp:ObjectDataSource
  ID="DataSourceSubmissionList"
  runat="server"
  TypeName="Project.WebUserControls.myapplications.sublayout">
</asp:ObjectDataSource>

/layouts/Portal/Company/Application/code.ascx.cs:

namespace Project.WebUserControls.myapplications
{  
    public partial class sublayout: System.Web.UI.UserControl 
    {
    }
}

Когда я использую эту строку в файле code.ascx, чтобы получить полное имя typename...

<% Response.Write(typeof(Project.WebUserControls.myapplications.sublayout).AssemblyQualifiedName); %>

Это печатает это на странице.

Project.WebUserControls.myapplications.sublayout, App_Web_oiftguk4,
Version=0.0.0.0, Culture=neutral, PublicKeyToken=null

Однако использование этого точного типа (Project.WebUserControls.myapplications.sublayout) в ObjectDataSource TypeName приводит к ошибке.

Я прошел через много вопросов об этом сообщении об ошибке. Я прочитал, что возможным решением может быть использование как пространства имен, так и имени сборки в свойстве TypeName, например, так. Но я не могу этого сделать, потому что код компилируется динамически, а имя сборки постоянно меняется.

Другое дело - эта ошибка возникает только при использовании подхода CodeFile. Если я переключусь на CodBehind, нет проблем.

Что может быть причиной такого поведения?

1 ответ

Решение

Я решил проблему, инициализировав свойство TypeName во время Page_Init и не указав TypeName непосредственно в ObjectDataSource:

/layouts/Portal/Company/Application/code.ascx.cs:

public void Page_Init(object o, EventArgs e)
{
   DataSourceSubmissionList.TypeName = this.GetType().AssemblyQualifiedName;
}

/layouts/Portal/Company/Application/code.ascx:

<asp:ObjectDataSource
  ID="DataSourceSubmissionList"
  runat="server"
</asp:ObjectDataSource>
Другие вопросы по тегам