コントローラから配列、変数の場合、どのように渡すのか
またview側でそれをどのように受け取りどのように使用するのか不明です。
モデル(特定のビューに合わせて作成された、厳密に型指定されたオブジェクト)を使うのが普通です。
一例(あくまで例です)を書きますと以下の通りです。
まず、以下のような class をモデルとして定義します。これを使って View にデータを渡すことを考えます。
public class CustomerName
{
public string Title { get; set; }
public string FirstName { get; set; }
public string MiddleName { get; set; }
public string LastName { get; set; }
}
Controller のアクションメソッドで、3 人分の CustomerName オブジェクトを作成し、そのコレクション(List<CustomerName> オブジェクト)を View に渡すことにします。コードは以下の通りです。(実際は、SQL Server などの DB から Linq to Entities を利用してデータを取得して設定するケースが多いのですが、それを書くと混乱しそうなので簡略化しました)
public ActionResult CustomerName()
{
ViewBag.Message = "ViewBag 経由で取得した情報";
List<CustomerName> model = new List<CustomerName>
{
new CustomerName { Title = "Mr.", FirstName = "Orlando", LastName = "Gee" },
new CustomerName { Title = "Mr.", FirstName = "Keith", LastName = "Harris" },
new CustomerName { Title = "Ms.", FirstName = "Donna", LastName = "Carreras" }
};
return View(model);
}
アクションメソッドから渡されたモデルを View で使用するには、以下のコードのように @model として型を宣言する必要があります。3 人分の CustomerName オブジェクトのコレクションなので IEnumerable<CustomerName> 型として宣言してます。Mvc5App.Models は名前空間名です。
@model IEnumerable<Mvc5App.Models.CustomerName>
@{
ViewBag.Title = "CustomerName";
}
<h2>CustomerName</h2>
<p>@ViewBag.Message</p>
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.Title)
</th>
<th>
@Html.DisplayNameFor(model => model.FirstName)
</th>
<th>
@Html.DisplayNameFor(model => model.LastName)
</th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Title)
</td>
<td>
@Html.DisplayFor(modelItem => item.FirstName)
</td>
<td>
@Html.DisplayFor(modelItem => item.LastName)
</td>
</tr>
}
</table>
上のコードで Model には IEnumerable<CustomerName> オブジェクトが渡されます。
また、DisplayNameFor のラムダ式の引数には CustomrerName オブジェクトが、DisplayFor のラムダ式引数には IEnumerable<CustomerName> オブジェクトが渡されます。
モデルの他に、ViewData や ViewBag のようなディクショナリを使ってアクションメソッドから View にデータを渡すこともできます。上のコードには ViewBag を使って例を書きました。