2013-10-05 69 views
-1

我有我的ArrayList的一个问题,我不能在视读出来从控制器ASP.NET MVC4 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); 

的Vie W:读出数组在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]'类型的项目。

任何人都知道我可以读出视图中的数组?

+0

错误信息是很清楚的objetct。 – scartag

+0

您正在混合一个'ArrayList'(它接受任何对象的列表)和一个强类型'IEnumerable <>'。选一个(更喜欢强类型的)。 –

+0

我该如何解决这个问题? – Patrick

回答

1

您的剃须刀视图期待ProfnteModels模式类型的IEnumerable。但是您正在传递未在List中执行IEnumerable的ArrayList类型。 因此,首先定义模态类,如下

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

数据库值然后装订成模态obejcts

列表< 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); 
     } 

//最后更改如下控制器代码返回whic实现IE​​numerable

DB dbase = new DB();

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

+0

非常感谢! – Patrick

0

使用,例如,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没有,您的问题将得到解决。

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

相关问题