如何在Razor ViewEngine中实现foreach循环并使用委托进行复杂数据处理?
- 内容介绍
- 文章标签
- 相关推荐
本文共计472个文字,预计阅读时间需要2分钟。
以下是对原文的简化
plaintext以下代码适用于webform视图引擎。遍历Model.Categories:
以下代码适用于webform视图引擎.<% Model.Categories.ForEach(x => { %> <li><a href="#">@x.Name</a></li> <% }) %>
我在razor视图中编写了以下代码:
@Model.Categories.ForEach(x => { <li><a href="#">@x.Name</a></li> })
但这不起作用.
任何人都可以建议,有没有办法在剃刀视图中实现这一点?
提前致谢.
@foreach(var x in Model.Categories) { <li><a href="#">@x.Name</a></li> }
上面的内容完全相同,更具惯用性.
我看不到使用Razor语法输出.ForEach()委托结果的方法. Razor期望调用方法或调用属性返回一个值,然后将其发送到视图输出中.因为.ForEach()不返回任何内容,所以它不知道如何处理它:
Cannot explicitly convert type ‘void’ to ‘object’
你可以非常简洁地使用迭代器索引:
@foreach (var item in Model.Categories.Select((cat, i) => new { Item = cat, Index = i })) { <li><a href="#">@x.Index - @x.Item.Name</a></li> }
如果要将其定义为扩展方法而不是匿名类型,则可以创建一个类来保存Item,Index对,并在IEnumerable< T>上定义扩展方法.这将生成包含在此构造中的原始可枚举项中的项.
public static IEnumerable<IndexedItem<T>> WithIndex<T>(this IEnumerable<T> input) { int i = 0; foreach(T item in input) yield return new IndexedItem<T> { Index = i++, Item = item }; }
班级:
public class IndexedItem<T> { public int Index { get; set; } public T Item { get; set; } }
用法:
@foreach(var x in Model.Categories.WithIndex()) { <li><a href="#">@x.Index - @x.Item.Name</a></li> }
本文共计472个文字,预计阅读时间需要2分钟。
以下是对原文的简化
plaintext以下代码适用于webform视图引擎。遍历Model.Categories:
以下代码适用于webform视图引擎.<% Model.Categories.ForEach(x => { %> <li><a href="#">@x.Name</a></li> <% }) %>
我在razor视图中编写了以下代码:
@Model.Categories.ForEach(x => { <li><a href="#">@x.Name</a></li> })
但这不起作用.
任何人都可以建议,有没有办法在剃刀视图中实现这一点?
提前致谢.
@foreach(var x in Model.Categories) { <li><a href="#">@x.Name</a></li> }
上面的内容完全相同,更具惯用性.
我看不到使用Razor语法输出.ForEach()委托结果的方法. Razor期望调用方法或调用属性返回一个值,然后将其发送到视图输出中.因为.ForEach()不返回任何内容,所以它不知道如何处理它:
Cannot explicitly convert type ‘void’ to ‘object’
你可以非常简洁地使用迭代器索引:
@foreach (var item in Model.Categories.Select((cat, i) => new { Item = cat, Index = i })) { <li><a href="#">@x.Index - @x.Item.Name</a></li> }
如果要将其定义为扩展方法而不是匿名类型,则可以创建一个类来保存Item,Index对,并在IEnumerable< T>上定义扩展方法.这将生成包含在此构造中的原始可枚举项中的项.
public static IEnumerable<IndexedItem<T>> WithIndex<T>(this IEnumerable<T> input) { int i = 0; foreach(T item in input) yield return new IndexedItem<T> { Index = i++, Item = item }; }
班级:
public class IndexedItem<T> { public int Index { get; set; } public T Item { get; set; } }
用法:
@foreach(var x in Model.Categories.WithIndex()) { <li><a href="#">@x.Index - @x.Item.Name</a></li> }

