2010-11-13 3 views
0

Я новичок в Repeater и DataBinding, и мне нужна помощь в его использовании.ASP.NET - Получение объекта внутри Repeater ItemTemplate с/без Eval

В PageLoad, у меня есть

var photos = from p in MyDataContext.Photos 
      select new { 
       p, 
       Url = p.GetImageUrl() 
      }; 
repeater1.DataSource = photos; 
repeater1.DataBind(); 

В контрольной Repeater, у меня есть

<ItemTemplate> 
    <% Photo p = (Photo) Eval("p"); %> <!-- Apparently I can't do this --> 
    ... 
    <asp:TextBox runat="server" ID="txtTime" Text='<%= p.Time == null ? "" : ((DateTime)p.Time).ToString("dd/MM/yyyy HH:mm:ss") %>' /> 
    ... 
</ItemTemplate> 

Но это не так.

Что мне нужно - это получить объект Photo в ItemTemplate, чтобы я мог делать с ним что-либо (например, чтобы отобразить время, как во второй строке в ItemTemplate выше). Возможно ли это сделать в повторителе?

Может ли кто-нибудь указать мне в правильном направлении?

Спасибо заранее!

ответ

1

Попробуйте что-нибудь подобное в случае onDatabound

if (e.Item.ItemType = ListItemType.Item) 
{ 
    photo p = (photo)e.DataItem; 
    Textbox txtTime = (Textbox)e.Item.FindControl("txtTime"); 

    txtTime.text = (p.Time == null ? "" : ((DateTime)p.Time).ToString("dd/MM/yyyy HH:mm:ss")); 
} 

Edit -

К сожалению, я Бесполезный видеть tra url. Похоже, вам, возможно, придется создать небольшой класс или структуру.

См. Это Stackoverflow link для обходного пути.

Сообщение Пола Суарта в этой теме сделало действительную точку.

+0

Спасибо Lareau, но e.Item.DataItem не является фотографией, я не знаю, какой тип это ... что-то вроде IQueryable <Фото, строка> (см. Мой код выше, var photos = ...) – Aximili

+0

Отлично! Большое спасибо Lareau! – Aximili

0

Вы пробовали просто:

<%# Eval("p") %> 

вместо

<% Photo p = (Photo) Eval("p"); %> 
+0

Это оригинальное заявление, которое сработало. Но это не присваивает значение Photo p. – Aximili