2011-04-14 4 views
1

어떻게 ASP.NET WebPage에서 배열에 Eval을 사용할 수 있습니까? 나는 예외 '데이터 바인딩 :'이일부 조건이있는 배열에 대한 평가

<asp:Repeater ID="GoodsRepeater" runat="server"> 

       <HeaderTemplate> 
       </HeaderTemplate> 

       <ItemTemplate> 

       <div class="<%# (Container.ItemIndex % 2)!=0 ? "GoodItemTdEven" : "GoodItemTdOdd" %>"> 

       <asp:Image ID="Image1" ImageUrl='<%# "/" + Eval("GoodsImages.First().SmallImageUrl") %>' AlternateText='<%# Eval("Name") %>' runat="server" /> 

       <div class="GoodItemDescriptionDiv" > 

        <asp:HyperLink CssClass="GoodItemNameText" NavigateUrl='<%# "~/Pages/Main/Catalog.aspx?productId=" + Eval("Id") %>' Text='<%# Eval("Name") %>' runat="server" /> 
        <%--<span class="GoodItemNameText"> <%# Eval("Name") %> </span> <br /> <br />--%> 
        <span class="GoodItemDescriptionText" > <%# Eval("Description") %> </span> 
        <br /> 

       </div> 


       </div> 

       </ItemTemplate> 

       <FooterTemplate> 
       </FooterTemplate> 

      </asp:Repeater> 

:

내가 <%# Eval(Images.First().SmallImageUrl) %> 또는 여기

<%# Eval(Images.SingleOrDefault(x => x.IsMainIMage).SmallImageUrl) %> 

처럼 뭔가를 쓰기 원하는 것은 코드 예제입니다 '. 유효한 인덱스 표현하지'먼저()

+0

문제 위의 것입니다 코드의 새로운 기능 : 코드 숨김에서

<%# GetImageUrl((YourImagesType)Eval("Images")) %> 

다음 : 그것은 당신의 마크 업 더 청소기를 만들 수 있을까? 목록 변환, 즉 .ToList()를 의미합니까? –

+0

이미지 란 무엇입니까? 왜 Eval이 여기에 필요합니까? SmallImageUrl이 string이면 평가가 필요하지 않습니다. – user492238

답변

3

평가 (예 : 데이터 테이블 /보기로 알려진 유형 또는 색인) 반사를 사용합니다 - 당신이 Container.DataItem에 실제 표현을 사용하는 것이 좋습니다 것 - 예를 들어

<asp:Image ID="Image1" ImageUrl='<%# "/" + (([your object type])Container.DataItem).GoodsImages[0].SmallImageUrl %>' AlternateText=... 

이 당신이 리피터 바인딩된다고 가정한다 컬렉션에 [your object type]이고 해당 유형은 GoodsImages이라는 배열을 반환하는 메서드가 있습니다.

First과 같은 확장 메서드를 사용하려는 경우 컴파일러는 가져 오는 네임 스페이스에서만 해당 메서드를 찾습니다. 다시 @Import 지시문 또는 Extension 클래스 (Enumerable.First(...)를 사용해야합니다.

5

이 값을 얻기 위해 코드 숨김으로 도우미 메서드를 만들면 어떨까요?

protected static string GetImageUrl(YourImagesType images) 
{ 
    return images 
     .Where(x => x.IsMainIMage) 
     .Select(x => x.SmallImageUrl) 
     .FirstOrDefault(); 
} 
관련 문제