我如何显示从控制器中的 viewbag 传递的数据以查看
How do i display data passed from viewbag in controller to view
我尝试在视图中使用@(foreach var x in viewbag.data2)循环显示
var data = from c in _context.Posts
join p in _context.PostViewCount on c.Id equals p.PostId
select new
{
posts = c,
p.Count,
c.Title,
p.PostId
};
var dat = data.OrderByDescending(x=>x.Count).ToList();
ViewBag.data2 = dat;
我收到无效操作异常
要访问 viewbag,请在您的视图中编写以下代码
@ViewBag.data2
它会给你数据。
并将调试器放在上面。剩下的你就明白了。
你的语法有点错误。
应该是:
@foreach(var x in ViewBag.data2){
@x.Count
@x.Title
}
编辑:因为 dynamic
类型似乎有点混乱。此示例显示如何使用定义的模型..
为您的数据创建一个 class 而不是使用匿名对象。
public class PostsModel
{
public string Title { get; set; }
public int Count { get; set; }
// etc...
}
修改您的查询...
var data = from c in _context.Posts
join p in _context.PostViewCount on c.Id equals p.PostId
select new PostsModel
{
Count = p.Count,
Title = c.Title,
// etc...
};
var dat = data.OrderByDescending(x=>x.Count).ToList();
ViewBag.data2 = dat;
然后将您的 Viewbag
变量转换为正确的类型...
@foreach(PostsModel x in ((IEnumerable<PostsModel>)ViewBag.data2)){
@x.Count
@x.Title
}
您可能需要使用以下方法将正确的命名空间导入您的视图:@using <namespace>
我尝试在视图中使用@(foreach var x in viewbag.data2)循环显示
var data = from c in _context.Posts
join p in _context.PostViewCount on c.Id equals p.PostId
select new
{
posts = c,
p.Count,
c.Title,
p.PostId
};
var dat = data.OrderByDescending(x=>x.Count).ToList();
ViewBag.data2 = dat;
我收到无效操作异常
要访问 viewbag,请在您的视图中编写以下代码 @ViewBag.data2
它会给你数据。
并将调试器放在上面。剩下的你就明白了。
你的语法有点错误。
应该是:
@foreach(var x in ViewBag.data2){
@x.Count
@x.Title
}
编辑:因为 dynamic
类型似乎有点混乱。此示例显示如何使用定义的模型..
为您的数据创建一个 class 而不是使用匿名对象。
public class PostsModel
{
public string Title { get; set; }
public int Count { get; set; }
// etc...
}
修改您的查询...
var data = from c in _context.Posts
join p in _context.PostViewCount on c.Id equals p.PostId
select new PostsModel
{
Count = p.Count,
Title = c.Title,
// etc...
};
var dat = data.OrderByDescending(x=>x.Count).ToList();
ViewBag.data2 = dat;
然后将您的 Viewbag
变量转换为正确的类型...
@foreach(PostsModel x in ((IEnumerable<PostsModel>)ViewBag.data2)){
@x.Count
@x.Title
}
您可能需要使用以下方法将正确的命名空间导入您的视图:@using <namespace>