2015-06-12 9 views
0

IDE: Visual Studio 2010 Framework: .NET 3.5 WebServer: Визуальная Server Studio DevПочему этот составной элемент управления не отображает дочерние элементы управления?

Я пытаюсь получить представление о пользовательских элементов управления и составных элементов управления. Код ниже был получен более или менее непосредственно из примеров, которые я нашел в различных учебниках. Я зарегистрировал элемент управления на своей странице и в своем наборе инструментов. Я могу перетащить элемент управления на странице и правильно отобразить свойство текста, но он не отображает мою кнопку, текстовое поле или раскрывающийся список. Может кто-нибудь посмотреть на этот код и рассказать мне, почему эти элементы не отображаются на моей странице?

Спасибо за чтение

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Linq; 
using System.Text; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

namespace HancockControls 
{ 
    [DefaultProperty("Text")] 
    [ToolboxData("<{0}:PeoplePicker runat=server></{0}:PeoplePicker>")] 
    public class PeoplePicker : CompositeControl 
    { 
     [Bindable(true)] 
     [Category("Appearance")] 
     [DefaultValue("")] 
     [Localizable(true)] 

     protected TextBox txtName = new TextBox(); 
     protected DropDownList ddlResults = new DropDownList(); 
     protected Button btnSearch = new Button(); 

     public string Text 
     { 
      get 
      { 
       EnsureChildControls(); 
       String s = (String)ViewState["Text"]; 
       return ((s == null) ? "[Text]" : s); 
      } 

      set 
      { 
       EnsureChildControls(); 
       ViewState["Text"] = value; 
      } 
     } 

     protected override void RenderContents(HtmlTextWriter output) 
     { 
      output.Write(Text); 
     } 

     protected override void CreateChildControls() 
     { 
      base.CreateChildControls(); 
      btnSearch.Text = "Search"; 
      this.Controls.Add(txtName); 
      this.Controls.Add(ddlResults); 
      this.Controls.Add(btnSearch); 
     } 

     public override void RenderControl(HtmlTextWriter writer) 
     { 
      base.RenderControl(writer); 
     } 
    } 
} 
+0

Вы изменили его размер так, чтобы он отображал все эти элементы управления? Я предполагаю, что вы не использовали контейнер макета, который регулирует размеры элементов на основе размера элемента управления ... –

+0

Я этого не делал. Я не знаю, как это сделать. Я выполнил поиск только сейчас для составного контейнера макета управления, но он не возвратил результаты, которые были очень значимыми для меня. Не могли бы вы показать мне краткий пример? Согласно этому учебнику http://www.c-sharpcorner.com/uploadfile/sapnabeniwal/create-and-use-composite-custom-control-in-Asp-Net/ и еще несколько других, это должно быть предоставление этих элементов управления , Но это не так. – Camenwolf

ответ

1

Отвечая на мой собственный вопрос здесь, в случае, если кто извлекает выгоду из него в будущем ...

проблема с моим кодом выше, видимо, в том, что при наследовании от CompositeControl класс класса WebControl, который мне нужен, чтобы прокомментировать или удалить метод RenderControl. CompositeControl, кажется, только использовать метод CreateChildControls для рендеринга, а метод RenderControl вызывает его ... Я не знаю ... не сделать как-то.

Использование CreateChildControls и любых литералов или элементов html, которые необходимо добавить в элемент управления, можно добавить путем определения и использования LiteralControl.

+0

Если вы ответите, вы должны пометить его как таковой (нажмите галочку в разделе голосов на этот ответ) –

Смежные вопросы