Список отображается пустым на Razor Pages, пока он заполнен - PullRequest
0 голосов
/ 02 июля 2019

Я получаю некоторые данные из API, из которого я создаю Список, однако, когда я пытаюсь перебрать список в файле .cshtml, он ничего не показывает, и счетчик списка равен 0. Но когда я перебираю список в методе OnGetAsync (), который он отображает, показывает результаты.

Я пробовал это без асинхронного включения и пытался заполнить список в методе getDataAsync ().

        public IList<Employee> Employee = new List<Employee>();

        public async void OnGetAsync()
        {
            // Sets up HttpClient
            await RunAsync();

            // API call method which returns a list filled with the results
            Employee = await GetDataAsync("api-url");

            // Shows Results!
            foreach (var item in Employee)
            {
                Debug.WriteLine(item.name);
            }
        }
static async Task<List<Employee>> GetDataAsync(string path)
        {
            string data = null;
            List<Employee> list = new List<Employee>();
            HttpResponseMessage response = await client.GetAsync(path);
            if (response.IsSuccessStatusCode)
            {
                data = await response.Content.ReadAsStringAsync();
            }
            JObject json = JObject.Parse(data);

            // Get the only the data i need from the entire json api result
            foreach (var d in json["data"])
            {
                string setId;
                string setName;
                string setUrl;


                if (d["id"] == null)
                {
                    setId = "NA";
                } else
                {
                    setId = d["id"].ToString();
                }

                if (d["person"]["full_name"] == null)
                {
                    setName = "NA";
                } else
                {
                    setName = d["person"]["full_name"].ToString();
                }

                if (d["avatar"]["url_small"] == null)
                {
                    setUrl = "NA";
                } else
                {
                    setUrl = d["avatar"]["url_small"].ToString();
                }

                list.Add(new Employee
                {
                    id = setId,
                    name = setName,
                    avatar_url = setUrl
                });
            }
            Debug.Unindent();
            return list;
        }
        <!-- Shows 0 -->
        <p>@Model.Employee.Count</p>
        <!-- Shows nothing -->
        @foreach (var item in Model.Employee)
        {
           <p>@Html.DisplayFor(modelItem => item.name)</p>
        }

Я ожидаю, что смогу перебирать список и показывать результаты на веб-странице, вместо этого счет для списка равен 0, и он ничего не показывает.

1 Ответ

1 голос
/ 02 июля 2019

Проблема в вашем коде в том, что OnGetAsync - это асинхронный метод, который должен возвращать Task, а вы возвращаете void

Просто измените его тип возврата.

public async Task OnGetAsync() 
{
    // Your code here
}
...