HtmlHelper<T>.DisplayNameFor()
作为视图模型时, IEnumerable<T>
完美无瑕地运行,为我提供了对实际类型模型等的智能感知支持。
@model IEnumerable<MyModel>
// e.g. for <th>
@Html.DisplayNameFor(model => model.Id)
但是,当我声明源自IEnumerable<T>
的自定义类型时,它会突然停止工作。
@model IPagedList<MyModel>
@Html.DisplayNameFor(model => model.Id) // Cannot resolve symbol 'Id'
而IPagedList<T>
是:
public interface IPagedList<T> : IEnumerable<T> {}
有什么方法可以解决这个问题吗?
答案 0 :(得分:4)
这就是C#中重载解析的工作原理。给定
public static void DoSomething<T>(T t)
{ }
public static void DoSomething<T>(IEnumerable<T> t)
{ }
然后DoSomething(new int[0])
将使用T
调用T = int[]
重载,而使用IEnumerable<T>
调用T = int
重载。
这是因为&#34;转换&#34;从int[]
到T
是&#34;更好&#34;在前一种情况下(T = int[]
比int[]
转换为IEnumerable<T>
在后一种情况下(T = int
)。(见7.5.3.2 Better function member
和{{1}在C#规范中。)
我认为您现在唯一的选择是使用7.5.3.3 7.5.3.3 Better conversion from expression
来指定您正在访问模型的元素:
.First()