0

私はエンティティフレームワークにマップされたデータベースを持っているし、それらのテーブル(エンティティ)を表示するコントローラ、ビューを持っています。私は、別のテーブルからデータを表示するための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と

答えて

0

です。これは必須ではありません。動的に型指定されたビューを使用すると、テーブルデータのReflectionベースの表示で問題なく動作します。ビュー

@modelダイナミック

では、あなたが動的なプロパティを追加することができます

ViewBag

でモデル情報を渡すことができます。プロパティの1つはIEnumerableです.Tは任意のモデルです。それはあなたがコントローラで他の

すべてを設定するプロパティの名前は自明であるべきである場合は、その後、(ViewBag.tableを参照することができます。

+0

私は試しました。 Model.first()を使用しようとしたときに、System.Collections.Generic.List 'に' First 'の定義が含まれていません。ビューでは、私は使用 "動的myobjects = db.GetType()。モデルでは、 "@ model dynamic"を使用しました –

1

を、私は今それを得た。

キーがにあります。代わりに、かみそりビューエンジンの.aspxのビューページを使用して、部分ビューを選択し、コントローラで

、私は次のようでした:

ビューで
public ActionResult ViewTable(string tablename) 
{ 

dynamic myobjects = db.getType().getProperty(tablename).getValue(db, null); 

return view(myobjects); 
} 

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<dynamic>" %> 

<table> 

<% foreach (var item in Model) { %> 
<tr> 
    <% Type t = item.GetType(); 
foreach (System.Reflection.PropertyInfo k in t.GetProperties()) 
{ 
    %> 
    <td><%:@t.GetProperty(k.Name).GetValue(item,null)%></td> 
<% } %> 
</tr> 


<%} %> 

</table> 

私は剃刀のビューでできるかどうか調べています。

+0

これはRazorのエンジンビューでも動作しますが、新しい問題が発生しました。なぜなら私は "@モデルダイナミック" –

+0

を使用しただけです。これは自動補完 "@モデル動的"のためです。 "@model dynamic" –

関連する問題