2010-07-30 2 views
1
<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 моего настраиваемого элемента управления внутри ретранслятора. В настоящее время значение заканчивается в базе данных как ноль. Вещи, которые я проверил/стоит указать:DataBinding не работает в моем ASP.NET UserControl

1) AlertId - это столбец идентификатора первичного ключа в базе данных, а таблица имеет множество строк, поэтому AlertId должен возвращать несколько значений.

2) Тип данных столбца БД (bigint) и тип данных AlertId (long) и тип данных переменной (System) объекта SystemObjectRecordID (длинный).

3) Если я установил '<% # ((Alert) Container.DataItem) .AlertId%>' в атрибут Text литерала, я получаю ожидаемые результаты. Таким образом, это как-то связано с моим настраиваемым элементом управления и, в частности, с привязкой данных к атрибуту SystemObjectRecordID.

4) Если я изменяю SystemObjectRecordID от long до строки, а затем do ((Alert) Container.DataItem) .AlertId.ToString() значение, которое я получаю для SystemObjectRecordId в отладке, является нулевым (но оно по-прежнему работает, когда оно назначено текстовый атрибут литерала).

5) Расположение пользовательского элемента управления - default.aspx, а элемент управления - comments.ascx. Файлы кода не имеют пространства имен.

6) Я пытался манипулировать OnItemDataBound свойство моего повторителя, но так как я доказал с буквальным, что данные является получение связано с использованием декларативного значения Я не уверен, что еще я мог бы делать внутри метода логики OnItemDataBound.

После того, как конечный пользователь делает комментарий в пользовательском интерфейсе, значение SystemObjectRecordId (которое должно было быть назначено, когда страница загружена - и мы знаем, что это имеет место в случае с буквалом), должна быть передана кодовому имени обычай UserControl:

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. Я из идей - мог бы использовать некоторые предложения на этом этапе. Благодарю.

+0

ретранслятор находится в панели обновления? – onof

+0

да, это правильно ... –

ответ

0

Хорошо, я понял, обходным для этого путем добавления SystemObjectRecordId к ViewState:

public long SystemObjectRecordId 
     { 
      get 
      { 
       if (ViewState["SystemObjectRecordId"] != null) 
        return long.Parse(ViewState["SystemObjectRecordId"].ToString()); 
       else 
        return 0; 
      } 
      set 
      { 
       ViewState["SystemObjectRecordId"] = value; 
      } 
     } 

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

0

Вы можете исправить это, добавив атрибут Bindable к вашему PopOple SystemObjectRecordId.

+0

привет, спасибо. Я уже пробовал это, и это не сработало. –