2016-05-23 37 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