asp.net Mvc的一个疑问

时间:2022-05-21 15:47:53
asp.net Mvc的一个疑问
如上图所示:
上面的那个
@Html.DisplayNameFor(model => model.LastName)

里面的那个类型推断不应该是
IEnumerable<ContosoUniversity.Models.Student>
这个类型的吗?为什么可以这么写,mvc框架可以推断出类型为
ContosoUniversity.Models.Student

请高手解答

14 个解决方案

#1


DisplayNameFor 专门做了取元素类型的声明,你可用把 model 换成 List<T> 试一下,会报错

#2


专门取 IEnumarable<T> 元素类型的重载

#3


 没看懂你在说什么,不过你页面定义的类型有问题,IEnumerable是一个迭代集合。

#4


引用 2 楼 u012142399 的回复:
专门取 IEnumarable<T> 元素类型的重载

嗯,我也猜是对DisplayNameFor对IEnumerable类型的数据做了特殊的处理,能直接推测出它里面的数据的类型

3楼的没明白么?
就是问
这里DispalyNameFor(a=>a.LastName) a推导出来的类型应该是IEnumarable<Student>,
但是实际上呢?
这个程序是对的,请说原因,最好是MSDN里面的解释!

#5


引用 3 楼 kittying 的回复:
 没看懂你在说什么,不过你页面定义的类型有问题,IEnumerable是一个迭代集合。

我页面定义的类型没有问题,完全可以这么定义 asp.net Mvc的一个疑问

#6


这个方法有两个重载:
DisplayNameFor<TModel, TValue>(HtmlHelper<IEnumerable<TModel>>, Expression<Func<TModel, TValue>>)
DisplayNameFor<TModel, TValue>(HtmlHelper<TModel>, Expression<Func<TModel, TValue>>)

#7


引用 6 楼 superliu1122 的回复:
这个方法有两个重载:
DisplayNameFor<TModel, TValue>(HtmlHelper<IEnumerable<TModel>>, Expression<Func<TModel, TValue>>)
DisplayNameFor<TModel, TValue>(HtmlHelper<TModel>, Expression<Func<TModel, TValue>>)


现在的年轻人,连 F12 都懒得按,逼你把方法声明贴出来
asp.net Mvc的一个疑问

#8


晕,此model非彼model
那个model是Lambda的参数。

你写成
@Html.DisplayNameFor(m => m.LastName)
它也能工作——此时你应该看清楚了,这个m和那个model根本不是一回事。

#9


model 这个类型IEnumerable<ContosoUniversity.Models.Student>
跟这个类型都可以的ContosoUniversity.Models.Student
两个都可以用的

#10


此model非彼model   asp.net Mvc的一个疑问

#11


@Html.DisplayNameFor(model => model.LastName) 
<==>
@Html.DisplayName("LastName") 
这里model可以随便命名,是lambda表达式,
也可以写成@Html.DisplayNameFor(model => Model.LastName) 

#12


请问7楼 按 F12能出什么东西?

#13


引用 8 楼 caozhy 的回复:
晕,此model非彼model
那个model是Lambda的参数。

你写成
@Html.DisplayNameFor(m => m.LastName)
它也能工作——此时你应该看清楚了,这个m和那个model根本不是一回事。


lambda表达式我懂,你那m的类型不一样要推断出来。a b c d e f g 都行

#14


结贴了,似乎只有6楼和9楼看明白了我想问什么!

#1


DisplayNameFor 专门做了取元素类型的声明,你可用把 model 换成 List<T> 试一下,会报错

#2


专门取 IEnumarable<T> 元素类型的重载

#3


 没看懂你在说什么,不过你页面定义的类型有问题,IEnumerable是一个迭代集合。

#4


引用 2 楼 u012142399 的回复:
专门取 IEnumarable<T> 元素类型的重载

嗯,我也猜是对DisplayNameFor对IEnumerable类型的数据做了特殊的处理,能直接推测出它里面的数据的类型

3楼的没明白么?
就是问
这里DispalyNameFor(a=>a.LastName) a推导出来的类型应该是IEnumarable<Student>,
但是实际上呢?
这个程序是对的,请说原因,最好是MSDN里面的解释!

#5


引用 3 楼 kittying 的回复:
 没看懂你在说什么,不过你页面定义的类型有问题,IEnumerable是一个迭代集合。

我页面定义的类型没有问题,完全可以这么定义 asp.net Mvc的一个疑问

#6


这个方法有两个重载:
DisplayNameFor<TModel, TValue>(HtmlHelper<IEnumerable<TModel>>, Expression<Func<TModel, TValue>>)
DisplayNameFor<TModel, TValue>(HtmlHelper<TModel>, Expression<Func<TModel, TValue>>)

#7


引用 6 楼 superliu1122 的回复:
这个方法有两个重载:
DisplayNameFor<TModel, TValue>(HtmlHelper<IEnumerable<TModel>>, Expression<Func<TModel, TValue>>)
DisplayNameFor<TModel, TValue>(HtmlHelper<TModel>, Expression<Func<TModel, TValue>>)


现在的年轻人,连 F12 都懒得按,逼你把方法声明贴出来
asp.net Mvc的一个疑问

#8


晕,此model非彼model
那个model是Lambda的参数。

你写成
@Html.DisplayNameFor(m => m.LastName)
它也能工作——此时你应该看清楚了,这个m和那个model根本不是一回事。

#9


model 这个类型IEnumerable<ContosoUniversity.Models.Student>
跟这个类型都可以的ContosoUniversity.Models.Student
两个都可以用的

#10


此model非彼model   asp.net Mvc的一个疑问

#11


@Html.DisplayNameFor(model => model.LastName) 
<==>
@Html.DisplayName("LastName") 
这里model可以随便命名,是lambda表达式,
也可以写成@Html.DisplayNameFor(model => Model.LastName) 

#12


请问7楼 按 F12能出什么东西?

#13


引用 8 楼 caozhy 的回复:
晕,此model非彼model
那个model是Lambda的参数。

你写成
@Html.DisplayNameFor(m => m.LastName)
它也能工作——此时你应该看清楚了,这个m和那个model根本不是一回事。


lambda表达式我懂,你那m的类型不一样要推断出来。a b c d e f g 都行

#14


结贴了,似乎只有6楼和9楼看明白了我想问什么!