ASP.NET MVC4 Arraylist从控制器到查看

时间:2013-10-05 12:32:23

标签: c# list asp.net-mvc-4 arraylist

我的arraylist有问题我无法在视图中读出

这里我有代码

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]'的模型项。 / p>

任何人都知道如何在视图中读出数组?

2 个答案:

答案 0 :(得分:1)

你的Razor视图期望有ProfnModels模态类型的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; }
}

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

列表与LT; ProfileModels&GT; ListModal =列表&lt; ProfileModels&gt; ();

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

答案 1 :(得分:0)

例如,使用List<T>

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

以下是需要考虑的一些事项:

创建一个包装类。

现在你正在从User中检索数据,而你只是将它们全部转换为字符串表示后将它们放在一个arraylist中。这太可怕了:您无法轻松访问这些值,这些值需要转换以供进一步使用,等等。

而是创建一个类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则不是,您的问题将会得到解决。

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