use*_*934 0 c# linq ienumerable for-loop asp.net-mvc-3
我正在寻找合适的语法.我正在使用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) %>
Run Code Online (Sandbox Code Playgroud)
你的模型是类型的IEnumerable<MvcMysurvey.Models.Mysurvey>
.
问题是IEnumerable<T>
不暴露indexer([]
)运算符.您有两种方法可以解决这种不便.
请改用数组或列表.
数组和IList<T>
实现确实暴露了索引器操作符.要使用索引器语法,您需要将模型转换为数组或其他IList<T>
.所以,只需改变你的
<% for (int i = 0; i < Model.Count(); i++) {%>
<%: Html.HiddenFor(m => m[i].ID) %>
Run Code Online (Sandbox Code Playgroud)
至
<% var items = Model.ToArray();
for (int i = 0; i < items.Length; i++) {%>
<%: Html.HiddenFor(m => items[i].ID) %>
Run Code Online (Sandbox Code Playgroud)使用该ElementAt
方法的方法
虽然IEnumerable<T>
不公开索引器操作符,但有一个LINQ扩展方法可以执行相同的操作.它的ElementAt
方法.要使用此语法,您可以将代码更改为:
<% for (int i = 0; i < Model.Count(); i++) {%>
<%: Html.HiddenFor(m => m.ElementAt(i).ID) %>
Run Code Online (Sandbox Code Playgroud)数组语法几乎肯定会更有效.