从控制器到视图 ASP.NET MVC4 阵列列表

本文关键字:MVC4 阵列 列表 NET ASP 控制器 视图 | 更新日期: 2023-09-27 18:33:57

我的数组列表有问题,无法在视图中读出它

这里有代码

DB:在这里我从数据库中读出数据

ArrayList result = new ArrayList();
        MySqlDataReader reader = cmd.ExecuteReader();
        if (reader.HasRows)
        {
            while (reader.Read())
            {
                ArrayList temp = new ArrayList();
                temp.Add(reader["Voornaam"].ToString());
                temp.Add(reader["Tussenvoegsel"].ToString());
                temp.Add(reader["Achternaam"].ToString());
                temp.Add(reader["Adres"].ToString());
                temp.Add(reader["Postcode"].ToString());
                temp.Add(reader["Plaats"].ToString());
                temp.Add(reader["Land"].ToString());
                temp.Add(reader["Geboortedatum"].ToString());
                temp.Add(reader["Telefoonnummer"].ToString());
                temp.Add(reader["Mobielnummer"].ToString());
                temp.Add(reader["Email"].ToString());
                result.Add(temp);
            }
            reader.Close();
        }
        else
        {
        }
        return result;

控制器:制作arraylist gebruikers并将其发送到视图

DB dbase = new DB();
            ArrayList Gebruikers = dbase.getGebruikerALL(Session["Bid"].ToString());
            return View(Gebruikers);

视图:读出每个数组中的数组

@model IEnumerable<EventRentalSystem.Models.ProfielModels>
@foreach (var item in Model)
                            {
                                <tr>
                                    <td>@Html.DisplayFor(modelItem => item.Gebruikersnaam)</td>
                                    <td>@Html.DisplayFor(modelItem => item.Voornaam)</td>
                                    <td>@Html.DisplayFor(modelItem => item.Tussenvoegsel)</td>
                                    <td>@Html.DisplayFor(modelItem => item.Achternaam)</td>
                                    <td>@Html.DisplayFor(modelItem => item.Adres)</td>
                                    <td>@Html.DisplayFor(modelItem => item.Postcode)</td>
                                    <td>@Html.DisplayFor(modelItem => item.Plaats)</td>
                                    <td>@Html.DisplayFor(modelItem => item.Land)</td>
                                    <td>@Html.DisplayFor(modelItem => item.Geboortedatum)</td>
                                    <td>@Html.DisplayFor(modelItem => item.Telefoonnummer)</td>
                                    <td>@Html.DisplayFor(modelItem => item.Mobielnummer)</td>
                                    <td>@Html.DisplayFor(modelItem => item.Email)</td>
                                    <td><a class="edit" href="javascript:;">Bewerk</a></td>
                                    <td><a class="delete" href="javascript:;">Verwijder</a></td>
                                </tr>
                            }

并且仍然收到错误:

传递到字典中的模型项类型为"System.Collections.ArrayList",但此字典需要类型为"System.Collections.Generic.IEnumerable'1[EventRentalSystem.Models.ProfielModels]"的模型项。

有人知道我如何在视图中读出数组吗?

从控制器到视图 ASP.NET MVC4 阵列列表

您的 Razor 视图需要 ProfielModels 模态类型的 IEnumerable。但是您传递的是 ArrayList 的类型,该类型没有实现 IEnumerable,而 List 则实现了 IEnumerable。所以首先定义你的模态类,如下所示

public class ProfielModels
{
    public string Voornaam { get; set; }
    public string Tussenvoegsel { get; set; }
    public string Achternaam { get; set; }
    public string Adres { get; set; }
    public string Postcode { get; set; }
    public string Plaats { get; set; }
    public string Land { get; set; }
    public string Geboortedatum { get; set; }
    public string Telefoonnummer { get; set; }
    public string Mobielnummer { get; set; }
    public string Email { get; set; }
}

然后将数据库值绑定到模态对象中

列表<ProfileModels> 列表模态 = 列表<ProfileModels> ();

        while (reader.Read())
        {
            ProfielModels temp = new ProfielModels();
            temp.Voornaam = reader["Voornaam"].ToString();
            temp.Tussenvoegsel = reader["Tussenvoegsel"].ToString();
            temp.Achternaam = reader["Achternaam"].ToString();
            temp.Adres = reader["Adres"].ToString();
            temp.Postcode = reader["Postcode"].ToString();
            temp.Plaats = reader["Plaats"].ToString();
            temp.Land = reader["Land"].ToString();
            temp.Geboortedatum = reader["Geboortedatum"].ToString();
            temp.Telefoonnummer = reader["Telefoonnummer"].ToString();
            temp.Mobielnummer = reader["Mobielnummer"].ToString();
            temp.Email = reader["Email"].ToString();
            ListModal.Add(temp);
        }

最后更改您的控制器代码,如下所示以返回实现 IEnumerable 的 objetct

DB dbase = new DB();

List<ProfielModels> ListModal= dbase.getGebruikerALL(Session["Bid"].ToString()); return View(Gebruikers);

例如

,使用List<T>

如果你来自Java背景:C#中的ArrayList比Java中的ArrayList<T>要古老得多:正确的替代方案是List<T>。C# 中的ArrayList可以采用任何类型的对象,而大多数情况更适合强类型集合。

以下是需要考虑的几点:

创建包装类。

现在,您正在从User中检索数据,并且只需将它们全部转换为字符串表示形式后将它们放在数组列表中即可。这很可怕:您不容易访问这些值,这些值将需要转换以供进一步使用,等等。

而是创建一个类User并将这些字段存储在其中

class User {
 public string FirstName { get; set; }
 public string LastName { get; set; }
 // Other properties
}

现在你可以像这样填充它:

while (reader.Read()) {
 User user= new User();
 user.FirstName = reader["Voornaam"]);
 user.LastName = reader["Achternaam"]);
 result.Add(user);
}

由于List<T>IENumerable<T>ArrayList不是,因此您的问题将得到解决。

旁注:属性以大写开头,局部变量以小写开头。