2011-11-11 69 views
1

数据库表有这样的字段: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 %> 

    <% } %> 

现在我qyestion是非常简单:是否可以添加一个变量来自动化这个“column1”,“column2”等?我怎么用它?

+0

您能否更清楚地了解这些列的真实含义(例如,他们的名字是什么?)这会让我们更容易帮助您。 –

+2

你真的应该使用模型而不是viewbag将集合带到视图中。 – Chris

+0

@GeorgeStocker列名就像我上面发布的一样,并且它们包含菜单名称。 克里斯我不是很确定,如果我把你的权利。你能不能请一个很短的样本? :) –

回答

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 %> 
    } 
} 
+0

这个项目的表模式已经被制作,我只需要做其余的项目:)但是我也认为它应该是不同,就像你提到的那样,我将不得不讨论这个问题并做出决定。谢谢您的帮助! –

0

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