2010-01-27 2 views
0

Мы используем LoadControl для загрузки файла ascx в элемент управления хранилища динамически. Отделенный код выглядит очень просто:LoadControl вызывает ошибку Parser

заголовка
child = base.LoadControl(manufacturerTemplate.TemplatePath); 
this.ManufacturerPlaceHolder.Controls.Add(child); 

управление выглядит следующим образом:

<%@ Control Language="C#" AutoEventWireup="true" Inherits="MyNamespace.MyControl" CodeBehind="MyControl.ascx.cs" %> 

Я проверял правописание всех и компиляции. Он отлично работает на веб-сервере ASP.NET Development. Но когда я загрузить его на наш хост IIS, я получаю эту ошибку:

Parser Error: Could not load type 'MyNamespace.MyControl.

отделенного кода компилируется без ошибок. Это на самом деле дублирование кода другого управляющего. (проверено правильность написания). Одна из вещей, которую я пробовал, состоит в том, чтобы изменить директиву @Control, чтобы указать на кодовое имя 2-го элемента управления (используя одну и ту же функциональность) ... он отлично работает.

Некоторые из других вещей, которые я пробовал:

  • разрешения файловой системы
  • Перезапуск IIS
  • Очистка папки Temp ASP.NET

Таким образом, в этот момент, я Не знаю, почему я не могу использовать код, который я пытаюсь добавить, не будет работать. Я могу указать его на код кода другого класса, и он отлично работает. (после изменения значения «inherits»). Поэтому я могу только предположить, что это проблема компиляции. Но он правильно строит без ошибок.

Что я забыл?

ответ

0

Я нашел проблему. Проект был «веб-приложением» вместо «веб-сайта», поэтому его пришлось не только скомпилировать, но мне пришлось развернуть сборку веб-сайта.

1

Изменить тег управления для этого

<%@ Control ClassName="MyControl" Language="C#" AutoEventWireup="true" CodeFile="MyControl.ascx.cs" Inherits="MyControl" %> 

На странице ASPX, что вы с помощью элемента управления, добавьте этот код

<%@ Reference Control="~/path/to/control/MyControl.ascx" %> 

В коде позади использования этого

MyControl controlObject= (MyControl)LoadControl("~/path/to/control/MyControl.ascx"); 
this.Controls.Add(controlObject); 
0

Некоторые мысли:

  • Убедитесь, что вы полностью очистите и восстановите приложение.
  • Убедитесь, что при публикации приложения вы удаляете (не заменяете!) Все существующие файлы.
  • Убедитесь, что элемент управления находится в подпапке или в каталоге, на который ссылается этот каталог.
  • Убедитесь, что dll для ascx находится в папке bin.
Смежные вопросы