2012-06-14 43 views
0

我正在尋找適當的語法。我正在使用MVC,在我看來,我需要循環遍歷模型,因爲我需要在不同的方面做一些其他的事情。我在這裏是一個新手,並通過大量的帖子看,但沒有找到語法。 下面是代碼,它的工作原理:如何用for循環替換foreach循環

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.master" Inherits="System.Web.Mvc.ViewPage<IEnumerable<MvcMysurvey.Models.Mysurvey>>" %> 
<% foreach (var item in Model) {%> 
      <%: Html.HiddenFor(m => item.ID) %> 

And here is the code I need the syntax for to make it working: 

    <% for (int i = 0; i < Model.Count(); i++) {%> 
      <%: Html.HiddenFor(m => m[i].ID) %> 
+0

使用foreach有什麼問題? –

+0

它只是你缺少的「循環計數」嗎?這就是爲什麼你想要循環而不是? 順便說一下,For循環語法對我來說似乎沒問題。有什麼問題 ? – Shenaniganz

+0

爲什麼一個foreach不是你所需要的?這兩個是非常相似的 –

回答

5

您的模型的類型爲IEnumerable<MvcMysurvey.Models.Mysurvey>

問題是IEnumerable<T>沒有公開indexer ([]) operator。您有兩個選擇來處理這種不便。

  1. 改爲使用數組或列表。
    數組和IList<T>實現確實暴露了索引運算符。要使用索引器語法,您需要將模型轉換爲數組或其他IList<T>。因此,只要改變你的

    <% for (int i = 0; i < Model.Count(); i++) {%> 
        <%: Html.HiddenFor(m => m[i].ID) %> 
    

    <% var items = Model.ToArray(); 
        for (int i = 0; i < items.Length; i++) {%> 
         <%: Html.HiddenFor(m => items[i].ID) %> 
    
  2. 使用the ElementAt method方法

    雖然IEnumerable<T>不公開的索引操作,有一個LINQ擴展方法,做同樣的事情。它是the ElementAt method。要使用此語法,您可以更改您的代碼:

    <% for (int i = 0; i < Model.Count(); i++) {%> 
        <%: Html.HiddenFor(m => m.ElementAt(i).ID) %> 
    

數組語法將幾乎肯定會更有效,但。

+0

解釋這正是我正在尋找 – user1456934

+0

@ user1456934,您可以通過單擊我的帖子左側的複選框選擇此答案。 – smartcaveman

0

我想這可能是你在找什麼?你的問題不太清楚,但是你聽起來像在根據計數等於什麼的條件來做某件事。如果是這種情況,你只需要添加一個if語句來檢查計數與你正在查找的任何值。

<% for (int i = 0; i < Model.Count(); i++) 
<% { %> 
    <% if (i == someCount) %> 
    <% { %> 
     <!-- Do Something Here --> 
    <% } %> 
    <%: Html.HiddenFor(m => m[i].ID) %> 
<% } %> 
+0

這是因爲IENUMERABLE 無法正常工作,如上面張貼 – user1456934