mcpField
S
syncfusion-aspnetcore-dropdownlist

syncfusion-aspnetcore-dropdownlist

github.com/syncfusionデザイン・UI052 回インストール2 週間前に更新
リポジトリ

syncfusion-aspnetcore-dropdownlist について

ASP.NET Core 開発者向けに、単一選択コントロールである Syncfusion DropdownList の実装を解説するスキルです。フォームや動的な選択に使うデータ連携、検索、カスタマイズを扱います。

主な機能

  1. 01ローカル・リモートデータ連携
  2. 02リアルタイムのフィルターと検索
  3. 03項目のグループ化と並べ替え
  4. 04項目・選択値テンプレート
  5. 05連動選択と仮想スクロール
  6. 06キーボード・スクリーンリーダー対応

活用シーン

  1. 01フォームでカテゴリや状態を選択
  2. 02依存する連動選択を構築
  3. 03大量の項目を検索
  4. 04API から動的な選択肢を読み込み

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/syncfusion/aspnetcore-ui-components-skills --skill syncfusion-aspnetcore-dropdownlist

インストール後、Claude Code で/syncfusion-aspnetcore-dropdownlistを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
accessibility-features.md
advanced-scenarios.md
data-binding.md
filtering-grouping.md
getting-started.md
templates-styling.md

詳細

ASP.NET Core での DropdownList の実装

DropdownList は、あらかじめ定義された値の一覧を表示する単一選択コントロールです。ユーザーはドロップダウンリストから値を 1 つ選択できます。データバインディング、フィルタリング、グループ化、カスタムテンプレート、アクセシビリティ機能に対応しています。

このスキルを使用する場面

以下が必要な場合に、このスキルを使用します。

  • ASP.NET Core アプリケーションに単一選択のドロップダウンを作成する
  • サーバー側のデータソース(配列、データベース、API)からドロップダウンのデータをバインドする
  • 大規模な一覧でフィルタリングを有効にする
  • 関連する項目をグループ化する
  • テンプレートで項目の表示をカスタマイズする
  • アクセシビリティへの準拠を確保する
  • 親の選択内容に応じてドロップダウンを連動させる
  • イベントでユーザーの選択を処理する

コンポーネントの概要

主な機能:

  • ローカル配列やリモートソースからのデータバインディング
  • 検索ボックスを使ったリアルタイムフィルタリング
  • 項目の自動グループ化
  • カスタマイズ可能な項目テンプレートと値テンプレート
  • キーボード操作による WCAG アクセシビリティ対応
  • 連動するドロップダウンへの対応
  • 大規模なデータセット向けの仮想スクロール

一般的なプロパティ:

  • DataSource - データ配列または DataManager
  • Fields - フィールドのマッピング(text、value、groupBy、iconCss)
  • AllowFiltering - フィルタリングの有効/無効
  • FilterType - フィルタリングアルゴリズム(StartsWith、Contains、EndsWith)
  • GroupBy - グループ化するフィールド名
  • ItemTemplate - カスタム項目の描画
  • ValueTemplate - 選択値のカスタム描画
  • Placeholder - ヒントテキスト
  • Value - 選択された値
  • ReadOnly - 読み取り専用の状態

ドキュメントとナビゲーションガイド

はじめに

📄 参照: references/getting-started.md

  • インストールと NuGet パッケージの設定
  • TagHelper の登録と設定
  • DropdownList の基本的な実装
  • HTML 構造と最小限のサンプル
  • CSS テーマのインポート
  • クリックイベントと変更イベントのハンドラー
データバインディングとデータソース

📄 参照: references/data-binding.md

  • 単純なデータ(文字列、数値)の配列のバインド
  • 複雑な JSON オブジェクトのバインド
  • ネストされたデータ構造のマッピング
  • DataManager を使ったリモートデータのバインド
  • OData と Web API の統合
  • フィールドのマッピングと値のバインド
  • テキストフィールドと値フィールドの理解
フィルタリングとグループ化

📄 参照: references/filtering-grouping.md

  • フィルタリングの有効化と設定
  • フィルターの種類(StartsWith、Contains、EndsWith)
  • 大文字と小文字を区別しないフィルタリング
  • カテゴリ別の項目のグループ化
  • カスタムのグループヘッダー
  • 並べ替え順の設定(昇順/降順)
  • パフォーマンス向上のための仮想グループ化
テンプレートとスタイル設定

📄 参照: references/templates-styling.md

  • 項目テンプレートのカスタマイズ
  • 選択値のテンプレート
  • ヘッダーとフッターのテンプレート
  • グループヘッダーのテンプレート
  • CSS クラスのカスタマイズ
  • テーマのスタイル設定と配色
  • レスポンシブなサイズ設定と配置
アクセシビリティと機能

📄 参照: references/accessibility-features.md

  • WCAG 2.1 レベル AA への準拠
  • キーボード操作(矢印キー、Enter、Tab)
  • ARIA 属性とスクリーンリーダーへの対応
  • フォーカス管理とフォーカスインジケーター
  • 無効状態の処理
  • RTL(右から左)言語への対応
  • ツールチップとヘルプテキストの統合
高度なシナリオ

📄 参照: references/advanced-scenarios.md

  • 連動するドロップダウン(依存する選択)
  • 複数選択ドロップダウンのパターン
  • 大規模なデータセット向けの仮想スクロール
  • 検索とオートコンプリートのパターン
  • API 統合と非同期データ読み込み
  • エラー処理と空の状態
  • パフォーマンス最適化のヒント

クイックスタートの例

コントローラー(HomeController.cs):

public class HomeController : Controller
{
    public IActionResult Index()
    {
        ViewBag.Fruits = new List<string> { "Apple", "Orange", "Banana", "Mango" };
        return View();
    }
}

ビュー(Index.cshtml):

@Html.EJ2().DropDownList()
    .Id("DropdownList")
    .DataSource(ViewBag.Fruits)
    .Placeholder("Select fruit")
    .Render()

一般的なパターン

パターン 1:イベント処理を伴う基本的な選択

モデル:

public class Category
{
    public int Id { get; set; }
    public string Name { get; set; }
}

コントローラー:

public IActionResult Index()
{
    var categories = new List<Category>
    {
        new Category { Id = 1, Name = "Electronics" },
        new Category { Id = 2, Name = "Furniture" },
        new Category { Id = 3, Name = "Clothing" }
    };
    ViewBag.Categories = categories;
    return View();
}

ビュー:

@Html.EJ2().DropDownList()
    .Id("Category")
    .DataSource(ViewBag.Categories)
    .Fields(fields => fields.Text("Name").Value("Id"))
    .Change("onCategoryChange")
    .Placeholder("Select category")
    .Render()

<script>
function onCategoryChange(args) {
    console.log('Selected ID:', args.value);
    console.log('Selected Text:', args.text);
    // Perform action based on selection
}
</script>
パターン 2:連動するドロップダウン

モデル:

public class Country
{
    public int Id { get; set; }
    public string Name { get; set; }
}

public class City
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int CountryId { get; set; }
}

コントローラー:

public IActionResult Index()
{
    var countries = new List<Country>
    {
        new Country { Id = 1, Name = "USA" },
        new Country { Id = 2, Name = "Canada" },
        new Country { Id = 3, Name = "Mexico" }
    };
    ViewBag.Countries = countries;
    return View();
}

[HttpGet("api/cities/{countryId}")]
public IActionResult GetCities(int countryId)
{
    var cities = new List<City>
    {
        new City { Id = 1, Name = "New York", CountryId = 1 },
        new City { Id = 2, Name = "Los Angeles", CountryId = 1 },
        new City { Id = 3, Name = "Toronto", CountryId = 2 },
        new City { Id = 4, Name = "Vancouver", CountryId = 2 }
    };
    
    var filtered = cities.Where(c => c.CountryId == countryId)
        .Select(c => new { c.Id, c.Name })
        .ToList();
    
    return Json(filtered);
}

ビュー:


@Html.EJ2().DropDownList()
    .Id("Country")
    .DataSource(ViewBag.Countries)
    .Fields(fields => fields.Text("Name").Value("Id"))
    .Change("onCountryChange")
    .Placeholder("Select country")
    .Render()


@Html.EJ2().DropDownList()
    .Id("City")
    .Placeholder("Select city")
    .Render()

<script>
function onCountryChange(args) {
    var cityDropdown = document.getElementById('City').ej2_instances[0];
    
    if (args.value) {
        // Fetch cities for selected country
        fetch('/home/GetCities/' + args.value)
            .then(response => response.json())
            .then(data => {
                cityDropdown.dataSource = data;
                cityDropdown.value = null;
            })
            .catch(error => console.error('Error:', error));
    } else {
        cityDropdown.dataSource = [];
    }
}
</script>
パターン 3:リモートデータを使用したフィルター付きリスト

モデル:

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }
}

API コントローラー:

[ApiController]
[Route("api/[controller]")]
public class ProductsController : ControllerBase
{
    [HttpGet]
    public IActionResult GetProducts()
    {
        var products = new List<Product>
        {
            new Product { Id = 1, Name = "Laptop", Price = 999.99m },
            new Product { Id = 2, Name = "Mouse", Price = 25.50m },
            new Product { Id = 3, Name = "Keyboard", Price = 75.00m },
            new Product { Id = 4, Name = "Monitor", Price = 299.99m }
        };
        return Ok(products);
    }
}

ビュー:

@Html.EJ2().DropDownList()
    .Id("Products")
    .DataSource(d => d.Url("/api/products"))
    .Fields(fields => fields.Text("Name").Value("Id"))
    .AllowFiltering(true)
    .FilterType(FilterType.Contains)
    .Placeholder("Search products...")
    .Render()

主なプロパティと使用するタイミング

プロパティ型使用するタイミング
DataSourceArray/DataManager項目を表示する場合は常に必要です
FieldsFieldSettings複雑なデータオブジェクトをバインドする場合
Valuestring/number項目を事前選択する場合
AllowFilteringbool10 個以上の項目があるリストの場合
FilterTypeFilterType検索動作をカスタマイズする場合
GroupBystring項目に論理的なカテゴリがある場合
ItemTemplatestring項目にリッチなコンテンツを表示する場合
PlaceholderstringUX のガイダンスを向上させる場合
ReadOnlyboolユーザーによる変更を防ぐ場合
Enabledbool条件に応じて有効化する場合

一般的な使用例

1. フォームの選択フィールド

カテゴリ、ステータス、またはタイプを選択するためのフォーム内のドロップダウン

2. 連動する選択肢

親の選択内容に応じて子の選択肢が変わる複数のドロップダウン

3. 検索可能なリスト

項目数の多いドロップダウンでフィルタリングを有効にする

4. グループ化された項目

カテゴリ別に項目を整理する(例:製品カテゴリ > サブカテゴリ)

5. 動的データ

ユーザーの操作に応じて、API またはデータベースから項目を読み込む

6. テンプレートのカスタマイズ

ドロップダウン項目にアイコン、画像、バッジなどのリッチなコンテンツを表示する


次のステップ


親ライブラリの概要とその他のコンポーネントについては、Implementing Syncfusion ASP.NET Core Components を参照してください。

コメント