web-dev-qa-db-ja.com

ブレザーのボックスバインディングを選択

モデルの "CountryId"を、ブレザーのSelectListの選択された項目の値にバインドしようとしています。すべてのCountryアイテムは、{CountryId、CountryName}オブジェクトのようなリストで提供されます。私はそのようにコードを行います:

    <InputSelect @bind-Value="model.ByCountryId" class="form-control">
        @if (model?.Countries != null)
        {
           @foreach (var cnt in model.Countries)
           {
               <option value="@cnt.Id">@cnt.Name</option>
           }
        }
     </InputSelect>

そしてコードブロック:

@code {

BrandModel model = new BrandModel();

protected override async Task OnInitializedAsync()
{
    model = new BrandModel
    {
        Id = 19,
        ByCountryId = 1,
        Countries = new List<ent.Country>
            {
                new ent.Country { Id = 1, Name = "Azerbaijan" },
                new ent.Country { Id = 2, Name = "Turkey" }
            },
        IsActive = true,
        Name = "Brand"
    };
}

しかし、この実行により、ブラウザで次のエラーが発生します。

blazor.webassembly.js:1 WASM:System.MissingMethodException: 'System.ComponentModel.ByteConverter'タイプのコンストラクタが見つかりません。

バインドの便利な方法は何ですか<select>およびmodel.dataブレザーで?読んでくれてありがとう!

1
Emba Ayyub

<InputSelect><EditForm Model="@model">..</EditForm >に入れるとうまく機能し、データバインディングに問題はありません。

以下のコードを使用して、csprojファイルに<BlazorLinkOnBuild>false</BlazorLinkOnBuild>を設定してください。

<PropertyGroup>
   <BlazorLinkOnBuild>false</BlazorLinkOnBuild>
</PropertyGroup>

https://github.com/aspnet/AspNetCore/issues/7784 を参照してください

更新:

<select>のように<InputSelect>タグを使用する

<select @bind="model.ByCountryId">
        @if (model?.Countries != null)
        {
            @foreach (var cnt in model.Countries)
            {
                <option value="@cnt.Id">@cnt.Name</option>
            }
        }
</select>
8
Xing Zou

たくさんあるのであなたの問題を解決しようとはしませんでした。代わりに、select要素で国のリストを表示し、選択した国コードまたはIDを取得する方法をコードで作成しました。モデルの定義方法と使用方法をご覧ください。このコードは、カスケードドロップダウンエクスペリエンス(国を選択した後に入力される都市のリストなど)を形成するために、他の選択要素と統合するのに適しています。コードスニペットをIndex.razorファイルにコピーして実行するだけです...

<select class="form-control" @bind="@SelectedCountryID">

    <option value=""></option>
    @foreach(var country in CountryList)
    {
        <option value = "@country.Code"> @country.Name </option >
    }
}

</select>

<p>@SelectedCountryID</p>

@code {

    string selectedCountryID;

    string SelectedCountryID
    {
        get => selectedCountryID;
        set
        {
            selectedCountryID = value;

        }
    }

    List<Country> CountryList = new List<Country>() { new Country ("USA", "United States"),
                                                      new Country ("UK", "United Kingdom") };

    public class Country
    {

        public Country(string code, string name)
        {
            Code = code;
            Name = name;
        }
        public string Code { get; set; }
        public string Name { get; set; }

    }
}
2
user12207343