2016-05-23 69 views
-2

我想在集合中动态地写入列名称。我的收藏集位于ViewBag和ViewData中。在ASP.NET MVC中ViewBag或ViewData中的动态列名称

我想

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

和项目[在上面的代码中给出了错误。

而且我已经试过

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

也不能正常工作。

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

如name_fr,name_de,name_en

我只想把文化代码出现。例如:名称+文化代码。

如果我键入@ item.name_fr它的作品。但我想动态地放置“fr”。

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

的错误是“无法适用与[]索引到类型的表达式”

什么可以做我的错误呢?我试图得到的是否可能?

+1

你是什么意思_write column name_?你的'exampleList'模型是什么,你试图输出什么? –

+1

什么是'exampleList'?我想这是一个班,你能发表它的定义吗?它可以像'[“列”+ column_id]'处理索引吗? – Andrei

+1

另外,错误是什么? –

回答

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> 

希望这是有道理的。

+0

感谢您的建议,但在哪里初始化该字典?我试图在类的构造函数中初始化,它不起作用。我尝试在类中的字典属性中初始化,它给出错误:字段初始值设定项不能引用非静态fiedl方法或属性.... – oneNiceFriend

+0

字典可以在构造函数内实例化,并且值可以添加运行时。 – SamGhatak