2009-11-11 4 views
0

Каков правильный способ сделать это в контроле datarepeater?DataRepeater без субконтроля

   <asp:Repeater ID="Repeater1" runat="server"> 
       <ItemTemplate> 
       <strong><%= Eval("FullName") %></strong><br /> 
       <p> 
       <%= Eval("Summary") %> 
       </p> 
       </ItemTemplate> 
       </asp:Repeater> 

Получение ошибки методы Databinding, такие как Eval(), XPath() и Bind() может быть использована только в контексте управления DataBound.

Я хотел бы просто написать FullName и Summary. Но я не хочу влагать субконтроли. Является ли Repsonse.Write лучшим способом?

UPDATE: Не уверен, если это необходимо, но только так, как я был в состоянии решить эту проблему был с контролем

+0

Вы не Repeater1.DataSource и Repeater1.DataBind() в коде? – 2009-11-11 20:30:28

+0

Nope. В CodeBehind ничего плохого нет. – BuddyJoe

ответ

3

Ретранслятор требует источник данных, назначенный таким образом:

public class Foo 
{ 
public string FullName { get;set; } 
public string Summary {get;set; } 

public Foo(fullName,summary) 
{ 
    FullName=fullName; 
    Summary=summary; 
} 
} 

/// elsewhere... 
List<Foo> myFoos = new List<Foo>(); 
myFoos.Add(new Foo("Alice","Some chick")); 
myFoos.Add(new Foo("Bob","Some guy")); 
myFoos.Add(new Foo("Charlie","Indeterminate")); 
Repeater1.DataSource = myFoos; 
Repeater1.DataBind(); 

Как показывает этот пример, вашим источником данных может быть все, что реализует IEnumerable - списки являются моими фаворитами, но большинство коллекций в C# попадают в эту категорию. Ваш источник данных не должен поступать из базы данных или в любом месте.

Вам не нужно использовать response.write или subcontrols. (в любом случае, серверные элементы управления не действуют внутри ретранслятора). Вы могли бы попытаться заменить

<%=Eval("... 

с

<%#Eval("... 

Я не уверен разницы, но вторая форма используется в большинстве примеров.

+1

Замена <% = с помощью <% # решит проблему. Если элемент управления не имеет источника данных, он ничего не выдаст. –

+0

с помощью <% = Eval. Я получаю ошибку. Методы привязки данных, такие как Eval(), XPath() и Bind(), могут использоваться только в контексте управления базой данных. с <% # Тип аргумента System.String не назначается для строки типа параметра. weird – BuddyJoe

+0

Опубликовать свою измененную разметку. –

0

Вы всегда можете попробовать следовать:

<%# DataBinder.Eval(Container.DataItem, "FullName") %> 
+0

Это дает мне ошибку. Вы не можете использовать DataBinder вне элемента управления DataBound? – BuddyJoe

+0

Вы не привязываете свой ретранслятор к источнику данных где-то? – Chris

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