簡體   English   中英

ASP.net中的foreach,帶有嵌套runat =“ server”

[英]foreach in ASP.net with nested runat=“server”

對於以下代碼:

<% foreach (Entities.Core.Location loc in locations){ %>
<div class="place_meta">
<img src="~/static/images/stars/star_25_sml.gif" runat="server" class="star_rating"/>
</div>
<% }; %>

我想顯示每個位置對象的星級圖像。 但是,僅顯示第一個位置對象的星級。 其余的圖像標簽變為<img class="star_rating" />

我是否在語法中缺少任何東西,使語法無法在aspx頁面上的foreach中使用runat = server進行控制? 這是與ASP.net 2.0。

我可能會在代碼隱藏區或顯示類中調用函數以絕對映射URL,但我很好奇是否有解決此問題的方法。

只是為了澄清起見,每個位置對象的圖像路徑可能都不同。

您不能在串聯循環中使用服務器控件,因為ASP.NET需要能夠唯一地標識每個控件以對其進行處理。 for ...循環可防止這種情況。 最簡單,最干凈的方法是使用Repeater控件並將您的集合綁定到它(在代碼后面)。 在綁定事件處理程序中設置URL屬性,並在綁定時維護一個計數器變量,以檢查您是否在第一項。

編輯:我對此進行了更多研究,發現如果分配ID屬性,則所有循環的實例都將獲得相同的ID,但是ASP.NET只識別找到的第一個控件。 僅在第一個實例上設置屬性是一種極其骯臟的方法。 請不要寫這樣的代碼。

除非您使用MVC,否則在這種情況下您可能會發現中繼器控件更有用。

如果我沒記錯的話,可以使用數據源(在此實例中為您的位置 ),然后遍歷並設置每個圖像。

我不知道您的代碼是否應該工作,但這是;-)

<asp:Image ImageUrl="~/static/images/stars/star_25_sml.gif" runat="server" class="star_rating" />

也許這就是您要尋找的。

編輯:查看System.Web.UI.HtmlControls.HtmlImage的代碼,您可以看到在(第一個)處理之后src屬性被刪除。 這可能就是為什么您的代碼只能獲得第一個正確的URI的原因。

我將刪除runat="server"屬性,並使用相對路徑(或完整路徑)而不是使用代字號來引用圖像。

編輯: FWIW,@ miies的想法適合ASP.NET范式,並且是為什么我要切換到ASP.NET MVC的一個示例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM