ASP .NET MVC 动态列名?

Posted

技术标签:

【中文标题】ASP .NET MVC 动态列名?【英文标题】:ASP .NET MVC dynamic column name? 【发布时间】:2011-12-27 03:49:21 【问题描述】:

数据库表有这样的字段:

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”等的变量?我该如何使用它?

【问题讨论】:

您能否更明确地说明这些列的实际内容(例如,它们的名称是什么?)这样我们可以更轻松地为您提供帮助。 你真的应该使用模型而不是 viewbag 来将集合带到视图中。 @GeorgeStocker 列名就像我在上面发布的一样,它们包含菜单名称。克里斯我不太确定我是否正确。你能贴一个很短的样本吗? :) 您将拥有一个视图模型,其中一个属性是 Collection。因此,您将返回 View(Model),并在视图中访问它 Model.Collection。然后你可以像这样旋转它:forarch(var item in Model.Collection) 【参考方案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 %>
    

【讨论】:

这个项目的表模式是这样制作的,我只需要完成项目的其余部分:) 但是我也认为它应该有所不同,就像你提到的那样,我将不得不讨论并决定。感谢您的帮助!【参考方案2】:

我同意其他人的观点,您应该使用视图模型。但是,对于当前的表结构,您仍然需要遍历模型并显示每个属性。如果您有能力更改数据库架构,我会按照 George Stocker 的建议将其展平。

【讨论】:

以上是关于ASP .NET MVC 动态列名?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ASP.NET Core MVC 中使用 select 标签动态编辑数据库表?

ASP NET MVC 剑道网格和列名

求一个asp.net+EasyUI的项目,功能为datagrid动态加载列名和数据

asp.net MVC动态路由

ASP.NET MVC - 动态授权

ASP.NET MVC & JQuery 动态表单内容