ViewBag中的动态列名称或asp net mvc中的ViewData

时间:2016-05-23 10:20:05

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

我想在集合中动态编写列名。我的收藏是在ViewBag和ViewData中。

我正在尝试

@{foreach (var item in ViewData["example"] as List<exampleList> )
                            {
                            <h1>@item["column" + column_id]</h1>

和item [在上面的代码中给出错误。

我也尝试了

@{foreach (var item in ViewBag.example )
                            {
                            <h1>@item.(column + column_id)</h1>

也行不通。

我只想在h1中自己编写列名。我不想让intellisense为我选择。在我的表格的每一行末尾都有语言后缀。

,例如name_fr,name_de,name_en

我只想在那里带来文化代码。例如:name + culture code。

如果我输入@ item.name_fr它有效。但是我想把它放在那里&#34; fr&#34;动态。

exampleList只是由Ado.net实体数据模型创建的类。这堂课没问题。这是一个简单的课程。它没有任何数据注释。

错误是&#34;无法将[]索引应用于&#34;

类型的表达式

我的错误是什么?我想要得到的是否可能?

1 个答案:

答案 0 :(得分:1)

你根本做不到,如果你真的想通过使用属性名作为字符串来加载对象的某些属性,你需要使用反射。

但是我建议不要这样做,使用反射来获取视图线程中的属性值可能是一个很大的性能损失。

更好的方法是使用Dictionary来实现此目的。在那里,您可以使用字符串存储值并获取它。

<强>演示

Dictionary<string,object> d = new Dictionary<string,object>();
d.Add("name_fr",name_fr) ;
d.Add("name_de",name_de) ;
d.Add("name_en",name_en) ;

并且在视野中:

<h1>@item.YourDictionaryProperty[column +"_"+ column_id]</h1>

希望它有意义。