gpt4 book ai didi

asp.net-mvc - 使用 ToExpando 方法的问题

转载 作者:行者123 更新时间:2023-12-02 10:44:47 28 4
gpt4 key购买 nike

您好,我尝试使用 ToExpando 解决方案在 Razor View 中使用匿名类。我使用这个解决方案 -> Dynamic Anonymous type in Razor causes RuntimeBinderException

我会写下我做了什么:

  1. 我添加了一个文件 Extensions.cs,其中放置了以下代码:

    public static class Extensions
    {
    public static ExpandoObject ToExpando(this object anonymousObject)
    {
    IDictionary<string, object> anonymousDictionary = HtmlHelper.AnonymousObjectToHtmlAttributes(anonymousObject);
    IDictionary<string, object> expando = new ExpandoObject();
    foreach (var item in anonymousDictionary)
    expando.Add(item);
    return (ExpandoObject)expando;
    }
    }
  2. 我编写了一个查询,在 Controller 方法中从数据库接收元组:

    IEnumerable<dynamic> articles = (from p in db.Articles.Where(p => p.user_id == 2)
    select new
    {
    p.article_id,
    p.title,
    p.date,
    p.category,
    AverageScore = db.Articles_Scores
    .Where(o => o.user_id == p.user_id && p.article_id == o.article_id)
    .Average(m => m.score)
    }).AsEnumerable()
    .Select(r => r.ToExpando());
    int ii = 0;
    foreach(var it in articles) {
    // HERE I CAN READ EVERYTHING
    ii = it.article_id;
    }
    return View(articles);
  3. 在 View 中我声明了一个模型:

    @model IEnumerable<dynamic>
  4. 我尝试获取每个元组:

    @foreach (dynamic item in Model) {
    // some code
    @item.article_id // HERE IS EXCEPTION
    }

在 foreach 行中我遇到了异常:

RuntimeBinderException:“System.Dynamic.ExpandoObject”不包含“article_id”的定义

我做错了什么?

最佳答案

您需要先调用.AsEnumerable().ToList()来强制ToExpando在客户端上运行。

关于asp.net-mvc - 使用 ToExpando 方法的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6667273/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com