ASP.NET UserControl не инициализирует дочерние элементы управления - PullRequest
14 голосов
/ 28 октября 2008

На моей странице есть следующее:

<aspe:UpdatePanel runat="server" ID="updatePanel">
    <ContentTemplate>
        <local:KeywordSelector runat="server" ID="ksKeywords" />
    </ContentTemplate>
</aspe:UpdatePanel>

Элемент управления KeywordSelector - это элемент управления, который я определяю в той же сборке, и local сопоставляется с его пространством имен.

Элемент управления состоит из нескольких других элементов управления и определяется следующим образом:

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

и имеет довольно много собственных серверных элементов управления, все они определены как элементы в файле .designer.cs.

Однако, ни в одной части жизненного цикла элемента управления не имеет дочерних объектов и не генерирует HTML :

  1. Все члены, определенные в файле .designer.cs, null.
  2. Звонки на HasControls возврат false.
  3. Звонки на EnsureChildControls ничего не делают.
  4. Коллекция Controls пуста.

Удаление UpdatePanel не принесло пользы. Я попытался воспроизвести его на чистой странице с новым UserControl, и произошло то же самое.

Я использую ASP.NET поверх .NET Framework 3.5 SP1 со встроенным веб-сервером.

Что мне здесь не хватает?

Обновление № 1: После комментария Роба я посмотрел на OnInit и обнаружил, что UserControl не обнаруживает, что у него есть дочерние элементы управления. Более того, CreateControlCollection никогда не вызывается!

Ответы [ 2 ]

24 голосов
/ 28 октября 2008

Ну, я нашел проблему (ы):

  1. Пользовательские элементы управления , в отличие от Пользовательские элементы управления должны быть зарегистрированы по одному в файле web.config . Сделайте это:

    <add tagPrefix="local" tagName="KeywordSelector" src="~/KeywordSelector.ascx" />

    вместо:

    <add tagPrefix="local" namespace="Keywords" assembly="Keywords" />

  2. Вы никогда не должны размещать WebControl в том же каталоге, что и Control, который его использует. Это совершенно глупо. Читайте об этом здесь .

Спасибо за помощь. Теперь, если бы я мог пометить свой ответ как ответ ...

0 голосов
/ 24 октября 2014

В моем случае причина была в том, что Resharper 7.1 добавил неверную директиву @Register в верхней части aspx - вместо этой желаемой строки:

<%@ Register Src="~/Controls/Hello/Hello.ascx" TagName="Hello" TagPrefix="p" %>

Я ошибся:

<%@ Register TagPrefix="p" Namespace="MyNamespace.WebApp.Controls" Assembly="MyApp.Web" %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...