【问题标题】:Error: foreach statement cannot operate on variables of type '' because '' does not contain a public definition for 'GetEnumerator'错误:foreach 语句无法对“”类型的变量进行操作,因为“”不包含“GetEnumerator”的公共定义
【发布时间】:2022-01-06 04:43:29
【问题描述】:

我想渲染数据以从包含列表的模型中查看

交易模型:

    public class Transaction
{
    public int AccountId { get; set; }
    public string AccountName { get; set; }
    public string Type { get; set; }
    public DateTime Date { get; set; }
    public int Amount { get; set; }
}

事务视图模型:

    public class TransactionViewModel
{
    public List<Transaction> Transactions { get; set; }

}

控制器:

public IActionResult Index()
    {
       // var dataset = new DataSet();
        using var connection = new NpgsqlConnection(connString);
        connection.Open();
        
        /* getting account name, type, date, amount from transaction and account table*/
        var sql = @"SELECT *
                        FROM account as a
                             INNER JOIN transaction AS t
                             ON a.account_id = t.account_id";

        using var sqlCommand = new NpgsqlCommand(sql, connection);
        NpgsqlDataReader reader = sqlCommand.ExecuteReader();
        List<Transaction> transaction_Lists = new List<Transaction>();

        if (reader.HasRows)

        {

            while (reader.Read())

            {

                transaction_Lists.Add(new Transaction

                {

                    AccountId = Convert.ToInt32(reader["account_id"]),

                    AccountName = Convert.ToString(reader["account_name"]),

                    Type = Convert.ToString(reader["type"]),

                    Amount = Convert.ToInt32(reader["amount"]),


                });

            }

        }

        return View(transaction_Lists);
    }

查看:

@using System.Data;
@model MyViewModel;

                @foreach(var item in Model)
            {
                <tr>
                    <td>@Model.AccountName</td>
                </tr>
            }

在视图中我收到错误消息:“foreach 语句无法对 '' 类型的变量进行操作,因为 '' 不包含 'GetEnumerator' 的公共定义”

为什么我不能循环播放?

【问题讨论】:

  • 无法知道,因为您没有发布MyViewModel 的代码(这很可能无法枚举)。请查看minimal reproducible example 发布代码指南和edit 相应问题。
  • 感谢您的帮助,` public class TransactionViewModel { public List Transactions { get;放; } }`

标签: c# list asp.net-core-mvc viewmodel .net-6.0


【解决方案1】:

从您的Index() 中,您尝试将视图模型返回为List&lt;Transaction&gt; 类型。

如下更改您的视图:

@model List<Transaction>

@foreach(var item in Model)
{
    <tr>
        <td>@item.AccountName</td>
    </tr>
}

Sample MVC (List&lt;Transaction&gt; model)


或者,如果您想将视图模型返回为 TransactionViewModel 类型。

控制器

public IActionResult Index()
{
   ...

    var model = new TransactionViewModel();
    model.Transactions = transaction_Lists;
            
    return View(model);
}

查看

@model TransactionViewModel

@foreach(var item in Model.Transactions)
{
    <tr>
        <td>@item.AccountName</td>
    </tr>
}

Sample MVC (TransactionViewModel model)

【讨论】:

  • 感谢您的帮助,但我有一个问题,但我在控制器中有一个问题,我收到错误:'Transaction' 不包含'TransactionId' 的定义你能帮帮我吗?
  • 您的 Transaction 类不包含名为“TransactionId”的属性。确保将此属性添加到类中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-16
  • 1970-01-01
  • 2020-10-21
  • 2017-03-08
  • 2016-03-27
  • 1970-01-01
相关资源
最近更新 更多