Приложение Blazor InputSelect Не извлекается из базы данных - PullRequest
1 голос
/ 06 апреля 2020

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

            //Razor Page     

            @inject ICountryData _db            
            <h1>Choose a Country</h1>            
            <h4>Countries</h4>
            @if (Countries is null)
            {
            <p><em>Loading...</em></p>
            }
            else
            {
            <div class="col-6">
            <EditForm Model="@DisplayCountry">
            <div class="form-group">
            <label class="col-2 font-weight-bold">CountryName:</label>
            <InputSelect  @bind-Value="DisplayCountry.CountryName" class="form-control">
            <option value="">Select</option>
            @foreach (var person in Countries)
            {
            <option value="@DisplayCountry.CountryName">     @DisplayCountry.CountryCode </option>
            }

            </InputSelect>
            </div>
            <button type="submit" class="btn btn-primary">Submit</button>
            </EditForm>
            </div>
            }
            @code {
            private List<CountryModel> Countries;
            private DisplayCountryModel DisplayCountry = new DisplayCountryModel();

            protected override async Task OnInitializedAsync()
            {
            Countries = await _db.GetCountry();
            }

            private async Task InsertCountry()
            {
            CountryModel C = new CountryModel
            {
            CountryCode = DisplayCountry.CountryCode,
            CountryName = DisplayCountry.CountryName,

            };

            await _db.InsertCountry(C);

            Countries.Add(C);

            DisplayCountry = new DisplayCountryModel();
            }
            }       


            using DataAccessLibrary.Models;
            using System;
            using System.Collections.Generic;
            using System.Text;
            using System.Threading.Tasks;

            namespace DataAccessLibrary
            {
            public class CountryData : ICountryData
            {
            private readonly ISqlDataAccess _db;

            public CountryData(ISqlDataAccess db)
            {
            _db = db;
            }

            public Task<List<CountryModel>> GetCountry()
            {
            string sql = "select * from dbo.Country";

            return _db.LoadData<CountryModel, dynamic>(sql, new { });
            }

            public Task InsertCountry(CountryModel Country)
            {
            string sql = @"insert into dbo.Country (CountryCode, CountryName)
            values (@CountryCode, @CountryName);";

            return _db.SaveData(sql, Country);
            }
            }
            }

1 Ответ

1 голос
/ 06 апреля 2020

Неверная переменная @foreach. Я переписал его, как показано ниже, и он работал.

<InputSelect @bind-Value="DisplayCountry.CountryName" class="form-control">
    <option value="">Select</option>
    @foreach (var item in Countries)
    {
        <option value="@item.CountryCode"> @item.CountryName </option>
    }
</InputSelect>
...