#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. Я пробовал это, но в строке, где установлен источник данных, возникают ошибки.