2010-11-13 30 views
0

我是Repeater和DataBinding的新手,我需要使用它的幫助。ASP.NET - 使用/不使用Eval的Repeater ItemTemplate中獲取對象

在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> 

但是,這是錯誤的。

我需要的是在ItemTemplate中獲取Photo對象,這樣我就可以做它(例如,顯示上面ItemTemplate中第二行的時間)。是否有可能在Repeater中做到這一點?

難道有人指着我正確的方向嗎?

預先感謝您!

回答

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")); 
} 

編輯 -

對不起,我沒看不到前者Tra Url在那裏。我看起來像你可能不得不創建一個小類或結構。

看到這個Stackoverflow link的黑客解決方法。

Paul Suart在該主題中的帖子提出了一個有效的觀點。

+0

感謝Lareau,但e.Item.DataItem不是照片,我不知道它是什麼類型...像IQueryable <照片,字符串>(請參閱我上面的代碼,var photos = ...) – Aximili 2010-11-14 04:38:02

+0

完美!非常感謝Lareau! – Aximili 2010-11-15 12:28:52

0

你有沒有嘗試過:

<%# Eval("p") %> 

,而不是

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

這就是最初的說法。但是,這不會將值分配給照片頁。 – Aximili 2010-11-13 08:28:35

相關問題