2014-12-08 2 views
2

Я пытаюсь передать динамические результаты в View from Controller, метод ShowColor возвращает динамические результаты. В представлении я пытаюсь выполнить цикл, но я получаю ошибкуПередача динамической модели в MVC5

«объект» не содержит определения для «ColorID».

У меня есть следующий код в контроллер и вид

public class myColor 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
    public string Like { get; set; } 
} 

public dynamic ShowColor() 
{ 
    IList<myColor> color = new List<myColor>(); 
    color.Add(new myColor { ID = 1, Name = "Red", Like = "***" }); 
    color.Add(new myColor { ID = 2, Name = "Green", Like = "*****" }); 
    color.Add(new myColor { ID = 3, Name = "Blue", Like = "**" }); 
    color.Add(new myColor { ID = 4, Name = "Yellow", Like = "*" }); 

    var select = (from c in color 
        select new 
        {      
         ColorID = c.ID, 
         ColorName = c.Name 
        }).ToList(); 

    return select; 
} 
public ActionResult DBDynamic() 
{ 
    return View(ShowColor()); 
} 

Просмотр

@model dynamic 

@{ 
    ViewBag.Title = "DBDynamic"; 
} 

<h2>DBDynamic</h2> 

<p> 
    <ul> 
     @foreach (var m in Model) 
     { 
      <li> @m.ColorID</li>    
     } 
    </ul> 

</p> 

Error

Debug Image

+0

Положите точку разрыва в вид бритвы и посмотрите, каков ваш результат. – Shoe

+0

Я добавил изображение отладки в нижней части сообщения. – sairfan

+0

У вас эта проблема решена? просто столкнулись с подобной проблемой, посмотрите, есть ли у вас какие-либо идеи. – Haobo

ответ

5

анонимный объект не такой же тонкий г как dynamic. Если вы хотите использовать его как dynamic затем бросил его в том, что:

@foreach (dynamic m in Model) 

Однако динамика лучше избегать, если это вообще возможно. Вы теряете всю проверку времени компиляции и даже intellisense. Вы не будете знать, доводилось ли вы дожидаться названия свойства до времени выполнения или даже если вы случайно неправильно использовали неправильный тип вещи до времени выполнения. Если что-то нарушено, вы хотите знать об этом во время компиляции, а не когда оно уже работает и влияет на пользователей, когда вы даже не можете знать, что произошла ошибка, если пользователь не уведомит вас об этом. Это ужасная ситуация для вашего приложения.

Длинные и короткие, используйте сильные типы. Если вы хотите что-то со свойствами, ColorID и ColorName, создайте модель представления с этими свойствами и выберите ваш запрос в экземпляры этого типа. Затем все будет хорошо и строго типизировано, и вы будете знать заранее, если есть некоторые ошибки или проблемы с вашим кодом.

+0

получение одинакового сообщения об ошибке. – sairfan

+0

возможно, проблема в том, что ваша модель сама динамична. Измените его на 'List ' или 'IEnumerable ' и посмотрите, что произойдет. –

+0

IEnumerable , Список не работает, тот же отчет об ошибке – sairfan

Смежные вопросы