如何在控制器中显示从Viewbag传递的数据以进行查看

时间:2019-05-30 09:51:34

标签: c# linq model-view-controller .net-core viewbag

我试图在视图中使用@(forview 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;

我收到无效的操作异常

2 个答案:

答案 0 :(得分:0)

您的语法有点错误。

应该是:

@foreach(var x in ViewBag.data2){

    @x.Count
    @x.Title

}

编辑:dynamic类型似乎有点混乱。此示例说明如何使用已定义的模型。

为您的数据创建一个类,而不是使用匿名对象。

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>

答案 1 :(得分:-1)

要访问viewbag,请在您的视图中编写以下代码 @ ViewBag.data2

它将为您提供数据。

并在其上放置调试器。剩下的你会明白的。