EditorFor Template的MVC IEnumerable;如何获得计数

Posted

技术标签:

【中文标题】EditorFor Template的MVC IEnumerable;如何获得计数【英文标题】:MVC IEnumerable of EditorFor Template; how to get the count 【发布时间】:2011-04-13 22:23:24 【问题描述】:

视图模型:

public class Foo 
    IEnumerable<Bar> Bars  get; set; 

Foo 模板:

@html.EditorFor(x => x.Bars)

条形模板:

//this is the closest I could find 
@ViewData.TemplateInfo.HtmlFieldPrefix //equals "Bars[0]" on the first iteration

有没有办法在渲染过程中获取模板内当前迭代的计数?除了将 HtmlFieldPrefix 字符串解析为计数。

【问题讨论】:

【参考方案1】:

您能否重组您的视图,使其执行以下操作:

@for( int idx = 0; idx < Model.Count; idx++ )

    @Html.EditorFor(m=>m[idx])

抱歉,如果 IEnumerable 不支持 Count,但如果不支持,您可以使用其他支持的集合。

【讨论】:

【参考方案2】:

只是在这里分享,因为这个问题对我有用,UIHint and template 也对我有帮助。

我坚持不要触摸 Foo 模板,但计数应该显示在 Bar 模板中。这就是EditorFor 处理IEnumerable 的方式。

    我将使用ICollection,因为EF 不支持IEnumerable 进行延迟加载。 ICollection 具有 Count 属性。 即使我需要使用IEnumerable。我将遍历集合并执行i++。稍后,在迭代或 foreach 完成后,i 是总数。

【讨论】:

以上是关于EditorFor Template的MVC IEnumerable;如何获得计数的主要内容,如果未能解决你的问题,请参考以下文章

mvc 3 Html.EditorFor 添加html属性不起作用

在 MVC 2 中将 css 类添加到 Html.EditorFor

MVC 在 EditorFor 中渲染局部视图

MVC Html.EditorFor 不接受标记

MVC 和 Razor 中 Html.TextboxFor 和 Html.EditorFor 的区别

ASP.NET MVC3 - 带有@Html.EditorFor 的文本区域