ASP .NET MVC动态列名?

时间:2011-11-11 16:07:07

标签: c# asp.net .net asp.net-mvc

数据库表包含以下字段:

fld_column1
fld_column1_item_1
fld_column1_item_2
fld_column1_item_3
fld_column2
fld_column2_item_1
fld_column2_item_2
fld_column2_item_3
fld_column3
fld_column3_item_1
fld_column3_item_2
fld_column3_item_3

我在控制器中这样做了:

ViewBag.Columns = from col in _db.tbl_columns
      select col;
      return View();

在视图中我这样做了:

<% foreach (tbl_columns col in (IEnumerable)ViewBag.Columns)
    { %>

      <%= col.fld_column1_item1 %>
      <%= col.fld_column2_item1 %>
      <%= col.fld_column3_item1 %>

    <% } %>

现在我的问题非常简单:是否可以添加一个自动化“column1”,“column2”等的变量?我怎么能用呢?

2 个答案:

答案 0 :(得分:1)

好像你可以改变你的表模式,这在那时很容易做到。

新表架构:

Id  Column   Item   ParentId
1    1        null   null
2    1        1      1
3    1        2      1
3    1        3      1
4    2        null   null
5    2        1      4
6    2        2      4
6    2        3      4
7    3        null   null
8    3        1      7
9    3        2      7
9    3        3      7

现在,您可以通过以下方式迭代它们(伪造的代码):

foreach (var rows in columns)
{
    foreach (var row in rows)
    {
        <%= row.Item %>
    }
}

答案 1 :(得分:0)

我同意其他人的意见,你应该使用视图模型。但是,使用当前表结构,您仍需要遍历模型并显示每个属性。如果您能够更改数据库模式,我会按照乔治·斯托克的建议将其展平。