Как отобразить список объектов для просмотра в ASP.Net MVC? - PullRequest
3 голосов
/ 07 мая 2019

Мне трудно отобразить значения из объектной модели списка в представление.

Я пытался отобразить его с помощью этого кода

@model IEnumerable<MVC.Models.RootObject>

@foreach (var item in @Model)
{
    <li>@item.records</li>
} 

Но это показываетошибка

Элемент модели, передаваемый в словарь, имеет тип 'MVC.Models.RootObject', но для этого словаря требуется элемент модели типа 'System.Collections.Generic.IEnumerable`1 [MVC.Models.RootObject] '.

Вот мой контроллер, который я использовал для передачи данных из модели в представление

           var transno = "ST-100420190001";

            var client = new HttpClient();
            var httpRequestMessage = new HttpRequestMessage
            {
                Method = HttpMethod.Get,
                RequestUri = new Uri("https://myurl.com/" + transno),
                Headers = {
                { HttpRequestHeader.Accept.ToString(), "application/json" },
                { HttpRequestHeader.ContentType.ToString(), "application/json"},
                { "client-id", "client_id"},
                { "client-secret","client_secret"},
                { "partner-id","partner_id"},
                { "X-Version", "1" }
            }
            };

            var response = client.SendAsync(httpRequestMessage).Result;
            RootObject obj = JsonConvert.DeserializeObject<RootObject>(await 
            response.Content.ReadAsStringAsync());

            return View(obj);

Модель RootObject выглядит следующим образом

public class RootObject
    {
        public List<Record> records { get; set; }
        public int totalRecords { get; set; }
    }

ТогдаМодель записи выглядит так

 public class Record
    {
        public string transferId { get; set; }
        public string type { get; set; }
        public DateTime createdAt { get; set; }
        public string dateUpdated { get; set; }
        public string state { get; set; }
        public string senderTransferId { get; set; }
    }

Ответы [ 2 ]

2 голосов
/ 07 мая 2019

Хорошо, давайте посмотрим на сообщение об ошибке

Ваше представление ожидает IEnumerable из RootObject, но вы просто передаете один RootObject.

The model item passed into the dictionary is of type 'MVC.Models.RootObject', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable`1[MVC.Models.RootObject]'.

Я не уверен, что ваш API отвечает, но вам может потребоваться DeserializeObject для IEnumerable из RootObject вместо одного объекта.Вы пытались отладить эти строки?

var response = client.SendAsync(httpRequestMessage).Result;
RootObject obj = JsonConvert.DeserializeObject<RootObject>(await response.Content.ReadAsStringAsync());

return View(obj);

Если это не так, и вы хотите сделать несколько вызовов API для создания списка на более поздний срок

Что-то подобное должно работать, но я бы порекомендовал следовать вышеизложенному, поскольку кажется, что вы ищете больше, судя по бритве, которую вы разместили.

var response = client.SendAsync(httpRequestMessage).Result;
RootObject obj = JsonConvert.DeserializeObject<RootObject>(await 
response.Content.ReadAsStringAsync());

IEnumerable<RootObject> list = new List<RootObject>(){ obj };

return View(list);

2 голосов
/ 07 мая 2019

Согласно моему комментарию, вы хотите изменить строку @model и, возможно, расширить цикл следующим образом.

@model MVC.Models.RootObject

@foreach (var item in @Model.records)
{
    <li>@item.transferId</li>
    <li>@item.type</li>
    // etc
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...