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

View: 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

0

たとえば、 を使用しList<T>ます。

Java のバックグラウンドを持っている場合: ArrayListC# の は 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、問題は解決されます。

補足: プロパティは大文字で始まり、ローカル変数は小文字で始まります。

于 2013-10-05T12:55:45.553 に答える