-1

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

这里我有代码

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);

查看:在foreach中读出数组

@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]”的模型项。

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

4

2 回答 2

1

您的 Razor 视图需要 ProfielModels Modal 类型的 IEnumerable。但是您传递的 ArrayList 类型未在 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> ListModal = 列表< 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 的对象

DB dbase = new DB();

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

于 2013-10-06T09:36:26.623 回答
0

例如,使用List<T>.

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

这里有几点需要考虑:

创建一个包装类。

现在,您正在从 a 中检索数据,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>is an IENumerable<T>while ArrayListis not,所以您的问题将得到解决。

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

于 2013-10-05T12:55:45.553 回答