ASP.NET - 使用/不使用Eval获取Repeater ItemTemplate中的对象

问题描述 投票:0回答:3

我是Repeater和DataBinding的新手,我需要帮助才能使用它。

在页面加载中,我有

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中显示第二行中的时间)。甚至可以在中继器中执行此操作吗?

有人能指出我正确的方向吗?

先感谢您!

c# asp.net data-binding repeater
3个回答
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"));
}

编辑 -

对不起,我没有在那里看到额外的Url。我看起来你可能要创建一个小类或结构。

有关黑客解决方法,请参阅此Stackoverflow link

Paul Suart在该帖子中的帖子提出了一个有效的观点。


0
投票

你有没有尝试过:

<%# Eval("p") %>

代替

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

0
投票

我用另一种方法。在我的“注册”中,我导入了对象类:

<%@ Import Namespace="Test.Test.TO" %>

有了这个可能会使用你的对象......

接下来,我在我的代码隐藏,全局变量中创建了一个与我想要绑定的类型相同的对象...

public Test test;

在我的Repeater里面的ItemTemplate:

<span style="display: none;"> <%# test = (Test)Container.DataItem %> </span>

现在,您可以使用所有对象的属性,包括ToString来格式化文化...

对不起我的英语不好。

© www.soinside.com 2019 - 2024. All rights reserved.