【问题标题】:How do i display data passed from viewbag in controller to view如何显示从控制器中的 viewbag 传递的数据以查看
【发布时间】:2019-05-30 09:51:34
【问题描述】:

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

我收到无效操作异常

【问题讨论】:

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


    【解决方案1】:

    你的语法有点错误。

    应该是:

    @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 &lt;namespace&gt;

    【讨论】:

    • 谢谢你,我已经尝试过,但仍然没有运气 foreach (var x in ViewBag.data2) { @x.Title }
    • @GauravAcharya 解释没有运气意味着什么。正如我们所说,我正在一个项目中运行这个。
    • 我收到异常“RuntimeBinderException:'object'不包含'Title'的定义”
    • @GauravAcharya 查看编辑,我认为您正在努力使用匿名类型,只需使用模型来避免此类问题。这个答案已经是一个教程,所以我不会再更新了。
    • 你需要在你的视图中写@x.'your property name'
    【解决方案2】:

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

    它会给你数据。

    并将调试器放在上面。你会明白其余的。

    【讨论】:

    • 我在我看来 System.Collections.Generic.List1[&lt;&gt;f__AnonymousType34[PremiumAccount.Post,System.Int32,System.String,System.Int32]]
    猜你喜欢
    • 1970-01-01
    • 2021-06-19
    • 1970-01-01
    • 2015-12-27
    • 2021-04-19
    • 1970-01-01
    • 2012-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多