私はエンティティフレームワークにマップされたデータベースを持っているし、それらのテーブル(エンティティ)を表示するコントローラ、ビューを持っています。私は、別のテーブルからデータを表示するための1つの汎用ビューを作成することを考えています。一つのテーブルを表示するにはMVC3の1つのビュー/モデルを複数のテーブルを扱うエンティティデータmodleでどのように使用するのですか?
、私は次のようにあります。私の見解では
public class ATaskController : Controller
{
private MY_DATA_SQLEntities db = new MY_DATA_SQLEntities();
//
// GET: /ATask/
public ViewResult Index()
{
return View(db.ATask.ToList());
}
}
:
@model IEnumerable<JRAM_MVC.ATask>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.name)
</td>
<td>
@Html.DisplayFor(modelItem => item.position)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id=item.ID }) |
@Html.ActionLink("Details", "Details", new { id=item.ID }) |
@Html.ActionLink("Delete", "Delete", new { id=item.ID })
</td>
</tr>
}
以上が一つのテーブルのみのためであり、それは完璧に動作します。しかし、私は多くのテーブルを持っている、私はテーブルごとに別々のコントローラとビューを作成したくない。次のように私がやったことは次のとおりです。この作品
@model IEnumerable<JRAM_MVC.ATask>
@*foreach (var item in Model)
{
<tr>
@{
Type t = item.GetType();
foreach (PropertyInfo k in t.GetProperties())
{
<td>@t.GetProperty(k.Name).GetValue(item,null)</td>
}
}
:
ビューの部分では、私のように変更しました。しかし、問題は以下のとおりです。
return View(db.ATask.ToList()); // in controller
と
@model IEnumerable<JRAM_MVC.ATask>
彼らはただ自分の名前を持つことにより、異なるテーブルを扱うことができるように、私はそれらを動的に作ることができますどのように?たとえば、文字列変数にテーブル名を取得し、プログラムが「ビュー(db.entityfortablename.ToList())を表示し、ビュー "@model IEnumerableを動的に作成します。
JRAM_MVC.ATaskは、あなたが強く型付けされたビューを使用しているobjectSetと
私は試しました。 Model.first()を使用しようとしたときに、System.Collections.Generic.List 'に' First 'の定義が含まれていません。ビューでは、私は使用 "動的myobjects = db.GetType()。モデルでは、 "@ model dynamic"を使用しました –