【发布时间】:2012-03-25 15:27:52
【问题描述】:
我将数据库映射到实体框架中,然后我有控制器、视图来显示这些表(实体)。我正在考虑创建一个通用视图来显示来自不同表的数据。
要显示一个表,我有以下内容:
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 是一个对象集
【问题讨论】:
标签: asp.net-mvc-3 model-view-controller dynamic model dynamic-data