我的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>
任何人都知道如何在视图中读出数组?
答案 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
则不是,您的问题将会得到解决。
旁注:属性以大写的局部变量开头,小写。