Итерирование модели в шаблоне Razor не удается отобразить - PullRequest
0 голосов
/ 20 сентября 2011

Попытка визуализировать коллекцию, и она молча не может ничего вывести.Я ищу похожую проблему на SO и не нашел ничего, что описывало бы мою проблему.

Я абсолютно уверен, что коллекция не пуста.Отладка в контроллере и представлении показывает элементы в наборе типа, который я установил.

Я попытался эти подходы, и оба ничего не рендерит.

@foreach (var item in Model.Messages)
{
    @Html.DisplayFor(msg => item.MessageBody)
}

@foreach (var item in Model.Messages)
{
    @Html.Display(item.MessageBody)
}

Это отображает значение какожидается

@foreach (var item in Model.Messages)
{
    @item.MessageBody
}

В чем здесь проблема?

1 Ответ

0 голосов
/ 20 сентября 2011

Странно, прекрасно работает для меня:

Модель:

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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...