2013-10-05 66 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沒有,您的問題將得到解決。

旁註:屬性以大寫開頭,局部變量爲小寫。

相關問題