Не удалось найти тип, указанный в свойстве 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. Код ниже:

/ макеты / портал / компания/приложение / код.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>

/ макеты / портал / компания/приложение / код.ascx вносятся.cs:

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

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

<% 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:

/ макеты / портал / компания/приложение / код.ascx вносятся.cs:

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

/ макеты / портал / компания/приложение / код.ascx-файл:

<asp:ObjectDataSource
  ID="DataSourceSubmissionList"
  runat="server"
</asp:ObjectDataSource>