ASP.NET - получение объекта внутри Repeater ItemTemplate с / без Eval - PullRequest
0 голосов
/ 13 ноября 2010

Я новичок в Repeater и DataBinding, и мне нужна помощь в его использовании.

В 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 выше). Возможно ли это сделать в репитере?

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

Заранее спасибо!

Ответы [ 3 ]

1 голос
/ 13 ноября 2010

Попробуйте что-то вроде этого в событии 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 для обходного пути взлома.

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

0 голосов
/ 16 апреля 2019

Я использую альтернативный метод.В моем «Регистре» я импортирую класс объекта:

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

С этим можно использовать ваш объект ...

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

public Test test;

В моем репитере внутри ItemTemplete:

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

Теперь вы можете использовать все свойства объекта, включая ToString, для форматирования с культурой ...

Извините за мой английский.

0 голосов
/ 13 ноября 2010

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

<%# Eval("p") %>

вместо

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