#c# #asp.net-mvc #model
#c# #asp.net-mvc #Модель
Вопрос:
Я изучаю MVC и для этого разрабатываю «умный форум». Как я могу получить значение из модели напрямую, без предварительной итерации, когда данные представляют собой «одну строку»?
@model IEnumerable<WebApplication28.ModelsFromDb.ArgomentiViewModel>
@foreach (var item in Model)
{
<dl class="dl-horizontal">
<dt>
@Html.DisplayNameFor(model => model.NomeArea)
</dt>
<dd>
@Html.DisplayFor(modelItem => item.NomeArea)
</dd>
}
Комментарии:
1. Если ваши данные представляют собой одну строку, то вам не следует передавать
IEnumerable
в представление.
Ответ №1:
Это был бы беспорядочный код, если бы вы сохранили свой тип модели как IEnumerable<>
. Поэтому я предлагаю вам изменить это одним из двух способов.
Если вы знаете, что всегда будет один элемент, зачем вам вообще нужно иметь перечислимый? Просто удалите его и убедитесь, что базовый объект возвращен из контроллера:
@model WebApplication28.ModelsFromDb.ArgomentiViewModel
Если вам приходится иметь дело с коллекциями, держу пари, что это более конкретный тип, который вы возвращаете из контроллера. Если это список, вы могли бы использовать IList<>
, который содержит гораздо больше операций и который вы могли бы индексировать:
@model IList<WebApplication28.ModelsFromDb.ArgomentiViewModel>
...
@Html.DisplayNameFor(model => model[0].NomeArea)
Ответ №2:
Ваш ActionMethod должен будет возвращать только одну строку, а не IEnumerable. Используйте метод SingleOrDefault() для вашего объекта. Верните это, по вашему мнению, чтобы убедиться, что вы собираетесь вернуть максимум одну строку.
@model WebApplication28.ModelsFromDb.ArgomentiViewModel
<dl class="dl-horizontal">
<dt>
@Html.DisplayNameFor(model => model.NomeArea)
</dt>
<dd>
@Html.DisplayFor(modelItem => item.NomeArea)
</dd>
</dl>