Веб-контроль пользователя с содержимым внутри - PullRequest
2 голосов
/ 11 августа 2010

Использование:

    <uc1:WindowControl ID="Window_ExpoNews" runat="server" Height="265px" Title="Expo News"
    Width="100%">              
    <ContentTemplate> 
        This content will show in the center cell of this user control.
        <br />
        I can even add real controls.
        <asp:TextBox ID="TextBox1" runat="server" />
        <br />
        Good times.
    </ContentTemplate>
</uc1:WindowControl> 

Источник управления:

 <asp:Panel ID="Panel2" 
           runat="server">                 
       </div>
</asp:Panel>
<asp:PlaceHolder runat="server" ID="BodyControlSpace"/>

Код позади:

public partial class Componants_WebUserControl : System.Web.UI.UserControl{

private ITemplate _ContentTemplate;

[PersistenceMode(PersistenceMode.InnerProperty)]
public ITemplate ContentTemplate
{
    get { return _ContentTemplate; }
    set { _ContentTemplate = value; }
}

protected override void OnInit(EventArgs e)
{
    base.OnInit(e);
    _ContentTemplate.InstantiateIn(BodyControlSpace); 
} 

public Unit Width
{
    get {return Panel1.Width;}
    set {Panel1.Width = value;}
}

public Unit Height
{
    get {return Panel1.Height;}
    set {Panel1.Height = value;}
}

public string Title
{
    get {return lblTitle.Text;}
    set {lblTitle.Text = value;}
}

}

Проблема в том, что это дает мне следующую ошибку:
В экземпляре объекта не задана ссылка на объект. Описание: во время выполнения текущего веб-запроса произошло необработанное исключение. Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде.

Сведения об исключении: System.NullReferenceException: ссылка на объект не установлена ​​на экземпляр объекта.

Ошибка источника:

Строка 21: {
Строка 22: base.OnInit (e);
Строка 23: _ContentTemplate.InstantiateIn (BodyControlSpace);
Строка 24:}
Строка 25:

Ответы [ 2 ]

1 голос
/ 11 августа 2010

наконец я нашел это, никто не сказал мне, что я могу добавить "если" там:

protected override void OnInit(EventArgs e)
{
    base.OnInit(e);
    if (_ContentTemplate != null)
         _ContentTemplate.InstantiateIn(BodyControlSpace); 
} 
0 голосов
/ 11 августа 2010

Как насчет вывода из класса панели в вашем веб-элементе управления.Это даст вам возможность делиться вокруг вашего контроля, но также позволит вам поместить контент внутрь.Попробуйте так:

public WindowControl : Panel
{
   // ...
}

В качестве альтернативы, если вы не хотите вносить какие-либо дополнительные изменения в ваш HTML, используйте Literal в качестве базового элемента управления:

public WindowControl : Literal
{
   // ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...