как получить «значения» модели без предварительного доступа к ней?

#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>