Странно, прекрасно работает для меня:
Модель:
public class MyViewModel
{
public IEnumerable<Message> Messages { get; set; }
}
public class Message
{
public string MessageBody { get; set; }
}
Контроллер:
public class HomeController : Controller
{
public ActionResult Index()
{
return View(new MyViewModel
{
Messages = Enumerable.Range(1, 10).Select(x => new Message
{
MessageBody = "message " + x
})
});
}
}
Вид:
@model MyViewModel
@foreach (var item in Model.Messages)
{
<div>@Html.DisplayFor(msg => item.MessageBody)</div>
}
Я подозреваю, что ваша коллекция Messages
пуста или что-то в этом роде.Не могу придумать другого рационального объяснения, поскольку я не могу воспроизвести вашу проблему, как показано в моем ответе.
В качестве примечания я бы использовал шаблоны отображения, чтобы избежать записи каких-либо циклов.Таким образом, ваше представление Index.cshtml
просто становится:
@model MyViewModel
@Html.DisplayFor(x => x.Messages)
, а затем вы пишете соответствующий шаблон отображения (~/Views/Shared/DisplayTemplates/Message.cshtml
), который будет автоматически отображаться для каждого элемента коллекции Messages
вашей модели представления:
@model Message
<div>@Html.DisplayFor(x => x.MessageBody)</div>