0

我正在寻找合适的语法。我正在使用 MVC,在我看来,我需要遍历模型,因为我需要以不同的数量做一些其他的事情。我是这里的新手,浏览了大量帖子,但没有找到语法。这是有效的代码:

<%@ 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) %>
4

2 回答 2

5

你的模型是 type IEnumerable<MvcMysurvey.Models.Mysurvey>

问题是它IEnumerable<T>没有公开indexer( []) 运算符。您有两种选择来处理这种不便。

  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. 使用方法方法_ElementAt

    虽然IEnumerable<T>没有公开索引器运算符,但有一个 LINQ 扩展方法可以做同样的事情。就是方法_ ElementAt要使用此语法,您可以将代码更改为:

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

不过,数组语法几乎肯定会更有效。

于 2012-06-15T00:31:15.060 回答
0

我想这可能是你要找的?您的问题不太清楚,但听起来您正在寻找基于计数等于某物的条件来做某事。如果是这种情况,您只需要添加一个 if 语句来检查计数是否与您要查找的任何值相匹配。

<% for (int i = 0; i < Model.Count(); i++)
<% { %>
    <% if (i == someCount) %>
    <% { %>
        <!-- Do Something Here -->
    <% } %>
    <%: Html.HiddenFor(m => m[i].ID) %>
<% } %>
于 2012-06-14T20:16:27.470 回答