Привязка данных не работает в моем ASP.NET UserControl - PullRequest
1 голос
/ 30 июля 2010
<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. У меня нет идей - можно использовать некоторые предложения на данный момент. Благодарю.

Ответы [ 2 ]

0 голосов
/ 07 августа 2010

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

0 голосов
/ 04 августа 2010

ОК, я нашел обходной путь для этого, добавив SystemObjectRecordId к ViewState:

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

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

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