ASP.NET Источник данных пользовательского управления Ретранслятором

#c# #asp.net #user-controls

#c# #asp.net #пользовательские элементы управления

Вопрос:

У меня есть пользовательский элемент управления, который содержит повторитель. Кажется, что данные не могут быть назначены его свойству DataSource, я пробовал несколько разных источников данных, но отображается следующая ошибка: (Я отладил его, и в источнике данных есть элементы данных)

 Object reference not set to an instance of an object
  

Вот aspx для повторителя:

 <asp:Repeater ID="repeater1" runat="server" >
    <HeaderTemplate>
        <ul>
    </HeaderTemplate>
        <ItemTemplate>
            <li>
                <%# Eval("Name") %>
            </li>
        </ItemTemplate>
    <FooterTemplate>
            </ul>
    </FooterTemplate>
</asp:Repeater>
  

Я создаю экземпляр пользовательского элемента управления в коде файла, в котором я хочу отобразить повторитель — я не могу ввести repeater1.DataSource и назначить его на этой странице, поэтому я добавил атрибут к пользовательскому элементу управления, который принимает IEnumerable в качестве источника данных.

Есть идеи, почему это не работает?

Комментарии:

1. где вы назначаете источник данных повторителю? Если вы не можете назначить его со своей страницы, потому что элемент управления repeater находится внутри пользовательского элемента управления, создайте метод, подобный setDataSource, в пользовательском элементе управления, и вы передаете источник данных этому методу со своей страницы, и этот метод назначит его повторителю.

2. Спасибо за ваш ответ — но он выдает ту же ошибку.

Ответ №1:

Вы должны делать такие вещи в DataBind() методе, как показано ниже:

 public override void DataBind()
{
   this.repeater.DataSource = ...
   this.repeater.DataBind();
   ...
}
  

Таким образом, он будет привязываться и при вызове родительской страницы Page.DataBind()

Управление.Метод привязки данных:

Используйте этот метод для привязки данных из источника к серверному элементу управления. Этот метод обычно используется после получения набора данных с помощью запроса к базе данных. Большинство элементов управления выполняют привязку данных автоматически, что означает, что обычно вам не нужно вызывать этот метод явно.

Комментарии:

1. Ошибка по-прежнему возникает, даже если источник данных содержит элементы. Метод переопределения, похоже, не вызывается.

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

3. @aspdotnetuser: вы уверены, что проблема связана с repeater? Можете ли вы включить исключения CLR в меню Debug -> Exceptions VS и запустить в режиме отладки (или подключить отладчик к w3wp.exe процесс) и посмотреть, возможно, проблема в другом месте

Ответ №2:

Попробуйте это: внутри пользовательских элементов управления, где находится повторитель, в методе OnLoad()

сделайте это :

  repeater1.DataSource = MyIEnumerableProperty;
 repeater1.DataBind();
  

Комментарии:

1. Я пробовал это, но в строке, где установлен источник данных, возникают ошибки.