2009-11-11 5 views
0

datarepeater 컨트롤에서이 작업을 수행하는 올바른 방법은 무엇입니까? 이러한 평가로서하위 컨트롤이없는 DataRepeater

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

얻기 오류 데이터 바인딩 방식()의 XPath() 및 바인딩()에만 바인딩 제어의 맥락에서 사용될 수있다.

저는 FullName과 Summary를 작성하고 싶습니다. 하지만 하위 컨트롤을 중첩하지 않으려합니다. Repsonse.Write가 가장 좋은 방법입니까?

UPDATE :

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(); 

: 이 필요한 경우 있는지,하지만 난 그것을 해결할 수 있었던 유일한 방법은 아니다 컨트롤

+0

이 코드에서 Repeater1.DataSource 및 Repeater1.DataBind()을 누락? –

+0

아니요. CodeBehind에 잘못된 것은 없습니다. – BuddyJoe

답변

3

중계기로했다 그래서 같이 할당 된 데이터 소스를 필요 이 예제에서 알 수 있듯이 데이터 소스는 IEnumerable을 구현하는 모든 것이 될 수 있습니다 - 목록은 내가 가장 좋아하는 컬렉션이지만 C#의 대부분의 컬렉션은이 범주에 속합니다. 귀하의 데이터 소스는 이 아니며은 데이터베이스 또는 다른 곳에서 가져와야합니다.

response.write 또는 subcontrols을 사용할 필요가 없습니다. (서버 컨트롤은 리피터 내부에서 유효하지 않습니다.). 당신은 내가 차이 확실 해요

<%#Eval("... 

<%=Eval("... 

를 교체 시도 할 수 있지만 두 번째 형태는 대부분의 예에서 사용된다.

+1

<% =를 <% #로 바꾸면 문제가 해결됩니다. 컨트롤에 데이터 소스가 없으면 아무 것도 출력하지 않습니다. –

+0

<% = Eval 오류가 발생합니다 - Eval(), XPath() 및 Bind()와 같은 데이터 바인딩 방법은 데이터 바인딩 된 컨트롤의 컨텍스트에서만 사용할 수 있습니다. <% # 인 인수 유형 System.String을 매개 변수 유형 문자열에 할당 할 수 없습니다. 이상한 – BuddyJoe

+0

수정 한 마크 업을 게시하십시오. –

0

당신은 항상 추적을 시도 할 수 있습니다 :

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

그건 나에게 오류가 발생합니다. DataBound 컨트롤 외부에서 DataBinder를 사용할 수 없습니까? – BuddyJoe

+0

중계기를 데이터 소스에 연결하지 않습니까? – Chris

관련 문제