2016-11-16 4 views
0

На мой взгляд:Использование словарей с ASP.NET MVC4

<tbody> 
    @foreach (var item in Model) 
    { 

     foreach (KeyValuePair<string, Dictionary<string, int>> fs in item.dicFS) 
     { 
      <tr> 
       <td>@Html.DisplayFor(modelItem => fs.Key.ToString())</td> 

       @foreach (KeyValuePair<string, int> lbl in item.dicFS[fs.ToString()]) 
       { 
        <td>@Html.DisplayFor(modelItem => lbl.Value.ToString())</td> 
       } 

      </tr> 
     } 
    } 
</tbody> 

Ошибка:

An exception of type 'System.InvalidOperationException' occurred in System.Web.Mvc.dll but was not handled in user code 

Additional information: Templates can be used only with field access, property access, single-dimension array index, or single-parameter custom indexer expressions. 

Это линия подсвечивается, когда приложение падает

<td>@Html.DisplayFor(modelItem => fs.Key.ToString())</td> 

Моя модель содержит открытый словарь, содержащий строковый ключ и значение словаря (вложенный словарь)

public Dictionary<string, Dictionary<string, int>> dicFS; 

Ключи и вложенный словарь инициализируются, а значения назначаются методом внутри модели.

Мне не разрешено использовать словари? Нужно ли мне преобразовывать тип данных моей модели в вложенный массив вместо использования вложенного словаря?

Заранее благодарим за вашу помощь!

ответ

1

Вы не можете использовать .ToString() внутри DisplayFor() способ.

Просто удалите .ToString(), и вы должны быть хорошо

<tbody> 
    @foreach (var item in Model) 
    { 

     foreach (KeyValuePair<string, Dictionary<string, int>> fs in item.dicFS) 
     { 
      <tr> 
       <td>@Html.DisplayFor(modelItem => fs.Key)</td> 

       @foreach (KeyValuePair<string, int> lbl in item.dicFS[fs.ToString()]) 
       { 
        <td>@Html.DisplayFor(modelItem => lbl.Value)</td> 
       } 

      </tr> 
     } 
    } 
</tbody> 
+0

Ну я буду штопала ... Я предвкушал некоторые сложные решения. Не имел представления. Спасибо! – blacksaibot