<asp:Repeater ID="repFilter" runat="server">
<HeaderTemplate>
<div id="posting" align="center">
</HeaderTemplate>
<ItemTemplate>
<div class="friends_area" id="record-">
<%# ((Alert)Container.DataItem).Message %>
<asp:Literal Visible="false" ID="litAlertId" Text='<%# ((Alert)Container.DataItem).AlertId %>' runat="server"></asp:Literal>
<Company:Comments ID="Comments1" SystemObjectRecordId='<%# ((Alert)Container.DataItem).AlertId %>' runat="server" SystemObjectId="7"></Company:Comments>
</div>
</ItemTemplate>
<FooterTemplate>
</div>
</FooterTemplate>
</asp:Repeater>
У меня проблема с установкой атрибута SystemObjectRecordID моего пользовательского элемента управления внутри повторителя. В настоящее время значение заканчивается как ноль в базе данных. Вещи, которые я проверил / стоит отметить:
1) AlertId - это столбец идентификатора первичного ключа в базе данных, и таблица содержит множество строк, поэтому AlertId должен возвращать несколько значений.
2) Тип данных столбца БД (bigint) и тип данных AlertId (long) и тип данных переменной getO / setter SystemObjectRecordID (long) совпадают.
3) Если для атрибута Text литерала установить «<% # ((Alert) Container.DataItem) .AlertId%>»), я получу ожидаемые результаты. Таким образом, это связано с моим пользовательским элементом управления, в частности с тем, как данные связаны с атрибутом SystemObjectRecordID.
4) Если я изменяю SystemObjectRecordID с long на string и затем делаю ((Alert) Container.DataItem) .AlertId.ToString () значение, которое я получаю для SystemObjectRecordId в отладке, равно нулю (но оно все равно работает, когда назначается тексту атрибут литерала).
5) Расположение пользовательского элемента управления - default.aspx, а элемента управления - comments.ascx. Файлы кода не разделяют пространство имен.
6) Я пытался манипулировать свойством OnItemDataBound моего повторителя, но, поскольку с литералом я доказал, что данные являются связанными с использованием декларативного значения, я не уверен, что еще я мог бы делать внутри логика метода OnItemDataBound.
Как только конечный пользователь делает комментарий в пользовательском интерфейсе, значение SystemObjectRecordId (которое должно было быть уже присвоено при загрузке страницы - и мы знаем, что это происходит в случае литерала) должно быть передано в код позади пользовательский контроль пользователя:
namespace Company.ProjectWeb.UserControls
{
public partial class Comments : UserControl, IComments
{
private readonly IUserSession _userSession;
private CommentsPresenter _presenter;
public int SystemObjectId { get; set; }
public long SystemObjectRecordId { get; set; }
Независимо от того, что я делаю, я всегда получаю ноль для SystemObjectRecordId при передаче через пользовательский элемент управления, который есть на моей странице default.aspx. У меня нет идей - можно использовать некоторые предложения на данный момент. Благодарю.