Can*_*ğlu 5 c# asp.net-mvc anonymous-types razor asp.net-mvc-4
我有一个服务器端代码,我从数据库返回一个匿名类列表:
public ActionResult DisplayMap()
{
ViewBag.Checkins = (from locationUpdate in db.LocationUpdates
select new
{
locationUpdate,
locationUpdate.User
}).ToList();
return View();
}
Run Code Online (Sandbox Code Playgroud)
在Razor页面,我想得到这个列表的计数:
@if (ViewBag.Checkins.Count() > 0)
{ ... }
Run Code Online (Sandbox Code Playgroud)
但是,它会抛出一个错误:
An exception of type 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException' occurred
in System.Core.dll but was not handled in user code.
Additional information: 'object' does not contain a definition for 'Count'
Run Code Online (Sandbox Code Playgroud)
当我输入ViewBag.Checkins即时窗口时,我得到:
ViewBag.Checkins
{System.Collections.Generic.List<<>f__AnonymousType6<MY_APP.LocationUpdate,MY_APP.User>>}
[0]: { locationUpdate = {System.Data.Entity.DynamicProxies.LocationUpdate_4532566693B61EF657DDFF4186F1D6802EA1AC8D5267ED245EB95FEDC596E129}, User = {System.Data.Entity.DynamicProxies.User_816C8A417B45FE8609CD1F0076A5E6ECBAB0F309D83D2F8A7119044B1C6060CF} }
Run Code Online (Sandbox Code Playgroud)
该Checkins物体的确是List,数据是正确的.我试过Count,Length太(没有方法调用,就像属性),但没有运气.我究竟做错了什么?
D S*_*ley 25
ViewBag是dynamic,虽然Count是一个扩展方法,它不是动态支持的(它必须在编译时绑定).
您可以强制转换为an IEnumerable<dynamic>,也可以直接使用static方法:
@if (((IEnumerable<dynamic>)ViewBag.Checkins).Count() > 0)
Run Code Online (Sandbox Code Playgroud)
要么
@if (Enumerable.Count(ViewBag.Checkins) > 0)
Run Code Online (Sandbox Code Playgroud)
或者创建一个带有Checkins属性的强类型模型,并ViewBag完全避免.
编辑
由于您只是想检查计数是否大于0,Any因此更合适(并且可能会节省一些处理时间,具体取决于方案):
@if (Enumerable.Any(ViewBag.Checkins))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18801 次 |
| 最近记录: |