2010-01-18 3 views
1

У меня есть то, что я считаю странной проблемой с привязкой данных listview.поведение привязки ListView

Я вызываю защищенный метод на моем кодовом названии ItemHtml() - как показано ниже.

<ItemTemplate> 
     <div class="itemWrapper"> 
      <%# ItemHtml() %> 
     </div> 
    </ItemTemplate> 

Метод определяется следующим образом.

protected string ItemHtml() 
{ 
    string itemHtml = 
     StateHeaderIfNewState() 
      + ActivityOwnerIfNew() 
      + ActivityCategoryIfNew() 
      + ActivityDescriptionHtml() 
      + TaskDescriptionHtml() 
      + RecordDetailsHtml(); 
    Trace.Write("DEBUG", itemHtml); 
    return itemHtml; 
} 

Трассировка показывает «itemHtml», как следующее (я удалил фактический HTML из кода, чтобы гарантировать, что это не просто недопустимый HTML): Virginia, активность Имя владельца, Категория, активность, задачи, Подробности

Однако в источнике страницы отсутствуют первые два значения (начинается с «Категория»).

Я что-то недопонимаю о привязке списков listview? Как след может иметь одно значение, но у источника есть другое?

ответ

2

Ваш щелчок «Просмотр источника» генерирует новый HTTP-запрос, вызывающий новый вызов сервера, который теперь имеет новый ответ (предположительно из-за логики, подразумеваемой «IfNew»). На мой взгляд, переменная itemHtml не может иметь два разных значения, которые вы описываете одновременно.

Если я прав, у вас должно быть несколько следов в результате нескольких запросов.

+0

Ах, я не понимал, что это новый запрос, имеет смысл. Вы правы, логика ifnew вызывает это. Моя главная забота, конечно, в том, что вывод на странице не включает элементы, которые я ожидаю увидеть (Вирджиния, имя владельца активности). Я просто использовал источник просмотра для проверки вывода. Основываясь на значениях трассировки, я должен видеть результат на странице вправо? Я не знаю, почему его там нет. – Jeremy

+0

Я установил точку останова в первых двух методах, чтобы посмотреть, что происходит в режиме отладки. – grenade

+1

При взгляде на трассировку ближе (отладка не привела меня туда, потому что первый проход прошел, как ожидалось), каждый элемент был привязан дважды. Оказывается, я явно вызывал listView.DataBind() - не понимал, что просто установка DataSourceID косвенно вызовет DataBind(). Поскольку он был вызван дважды, логика ifNew была оценена как ложная во второй раз. – Jeremy

Смежные вопросы