Как предоставить «данные» в пользовательский контроль внутри ретранслятора? - PullRequest
5 голосов
/ 30 июня 2011

Может кто-нибудь объяснить самый простой способ предоставления данных для пользователя элемента управления внутри ретранслятора?

У меня есть следующее:

Default.aspx

<!-- this.GetData() returns IEnumerable<Object> -->
<asp:Repeater runat="server" datasource='<%#this.GetData()%>'>
    <ItemTemplate>
        <my:CustomControl runat="server" datasource='<%#Container.DataItem %>
    </ItemTemplate>
</asp:Repeater>

Кодовый код

    protected void Page_Load(object sender, EventArgs e)
    {
        this.DataBind();
    }

CustomControl.ascx

<!-- Object has property Title -->
<h1><%#this.DataSource.Title%></h1>

Кодовый код:

[System.ComponentModel.DefaultBindingProperty("DataSource")]
public partial class CustomControl : System.Web.UI.UserControl
{
    public Item DataSource { get; set; }

    protected void Page_Load(object sender, EventArgs e)
    {
        var x = this.DataSource; //null here
    }

    protected void Page_PreRender(object sender, EventArgs e)
    {
        var x = this.DataSource; //still null
    }
}

Ответы [ 2 ]

5 голосов
/ 30 июня 2011

Вы можете добавить свойства в пользовательский элемент управления, а затем установить их во время привязки данных.

следующим образом:

<!-- this.GetData() returns IEnumerable<Object> -->
<asp:Repeater runat="server" datasource='<%#this.GetData()%>'>
    <ItemTemplate>
        <my:CustomControl runat="server" title='<%#Container.DataItem.title %>
    </ItemTemplate>
</asp:Repeater>

Codebehind

protected void Page_Load(object sender, EventArgs e)
{
    this.DataBind();
}

CustomControl.ascx

<!-- Object has property Title -->
<h1><%#this.Title%></h1>

Кодовое обозначение:

[System.ComponentModel.DefaultBindingProperty("DataSource")]
public partial class CustomControl : System.Web.UI.UserControl
{
    public Item DataSource { get; set; }

    public string title { get; set; }

    protected void Page_Load(object sender, EventArgs e)
    {
        var x = this.DataSource; //null here
    }

    protected void Page_PreRender(object sender, EventArgs e)
    {
        var x = this.DataSource; //still null
     }
}
0 голосов
/ 07 апреля 2015

Я нашел элегантное решение в другом посте здесь: ASP.NET Загрузка пользовательского элемента управления в ретранслятор , Энтони Пеграм

Резюме:

Использование события ItemDataBound (отправитель объекта, RepeaterItemEventArgs e) ретранслятора для передачи информации в свойства пользовательского веб-элемента управления (которые вы создали).

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