2012-06-14 42 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