2011-04-14 105 views
1

如何在ASP.NET WebParamee中使用Eval作爲數組?Eval for array with some conditional

我想寫點東西像<%# Eval(Images.First().SmallImageUrl) %>

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

下面是代碼示例:首先():

<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> 

我有一個異常 '數據綁定 '' 不是一個有效的索引表達式。'

+0

有什麼問題將上面的代碼?你的意思是列表轉換,即.ToList()? – 2011-04-14 10:51:05

+0

什麼是圖像?爲什麼在這裏需要Eval?如果SmallImageUrl是字符串,則不需要Eval。 – user492238 2011-04-14 10:56:03

回答

3

評估和演示使用反射(或分度上已知的類型,例如數據表/圖) - 我建議您使用Container.DataItem實際表達 - 例如

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

這是假設要綁定的中繼器收集[your object type],該類型的方法名爲GoodsImages返回一個數組。

請注意,如果您希望使用擴展方法(如First),那麼編譯器僅在您正在導入的名稱空間內查找它們。如此反覆,你需要爲使用@Import指令或擴展類即Enumerable.First(...

5

你爲什麼不以隱藏代碼創建一個輔助方法來得到這個值?它可以讓你的標記更清潔:

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

,然後在後臺代碼:

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