📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

192行目: 192行目:


== オプションパラメータ / クエリパラメータ ==
== オプションパラメータ / クエリパラメータ ==
パラメータ処理により、以下に示すようなURLに対応することができる。<br>
* /products
*: カテゴリなし
* /products/1
*: カテゴリID指定
* /products?search=keyboard
*: 検索キーワード指定
* /products/1?search=keyboard&page=2
*: 全てのパラメータ指定
<br>
==== オプションパラメータ ====
==== オプションパラメータ ====
波括弧内に<code>?</code>を付加することにより、実現できる。<br>
波括弧内に<code>?</code>を付加することにより、実現できる。<br>
<br>
<br>
  <syntaxhighlight lang="c#">
  <syntaxhighlight lang="c#">
  @page "/user/{id?}"
  @page "/user/{id?}"                     // idパラメータはオプション (省略可能)
@page "/blog/{year:int?}/{month:int?}"  // 年月も省略可能
   
   
  @code {
  @code {
     [Parameter]
     [Parameter]
     public string Id { get; set; }
     public string Id { get; set; }
    [Parameter]
    public int? Year { get; set; }
    [Parameter]
    public int? Month { get; set; }
   
   
     protected override void OnInitialized()
     protected override void OnInitialized()
     {
     {
       if (string.IsNullOrEmpty(Id))
       // パラメータが省略された場合のデフォルト値設定
      Id    ??= "default";          // Idが未指定の場合は、"default"を設定
      Year  ??= DateTime.Now.Year;  // 年が未指定の場合は現在の年を設定
      Month ??= DateTime.Now.Month;  // 月が未指定の場合は現在の月を設定
    }
}
</syntaxhighlight>
<br>
==== クエリパラメータ ====
<syntaxhighlight lang="c#">
@page "/search"
@inject NavigationManager NavigationManager  // URLの操作に必要なサービスの注入
@code {
    // クエリパラメータを格納するディクショナリ
    private Dictionary<string, string> QueryParameters;
    protected override void OnInitialized()
    {
      // 現在のURLからクエリパラメータを解析
      var uri = new Uri(NavigationManager.Uri);
      QueryParameters = Microsoft.AspNetCore.WebUtilities.QueryHelpers.ParseQuery(uri.Query)
                        .ToDictionary(p => p.Key, p => p.Value.ToString());
    }
    // 検索条件を更新してページ遷移を行うメソッド
    private void UpdateSearch(string query, int page)
    {
      // クエリパラメータの設定
      var parameters = new Dictionary<string, string>
       {
       {
           Id = "default";
           { "q", query },              // 検索キーワード
       }
          { "page", page.ToString() }  // ページ番号
      };
      // クエリパラメータを含むURLを生成して遷移
      var url = QueryHelpers.AddQueryString("/search", parameters);
       NavigationManager.NavigateTo(url);
    }
}
</syntaxhighlight>
<br>
==== 2つのパラメータの組み合わせ ====
<syntaxhighlight lang="c#">
@page "/products/{categoryId?}"              // カテゴリIDはオプション
@inject NavigationManager NavigationManager
@code {
    [Parameter]
    public string CategoryId { get; set; }  // URLパラメータ
    // クエリパラメータから検索キーワードを取得
    private string SearchTerm => GetQueryParameter("search");
    // クエリパラメータからページ番号を取得 (デフォルト : 1)
    private int Page => int.Parse(GetQueryParameter("page") ?? "1");
    // クエリパラメータを取得するヘルパーメソッド
    private string GetQueryParameter(string key)
    {
      var uri = new Uri(NavigationManager.Uri);
      var parameters = QueryHelpers.ParseQuery(uri.Query);
      return parameters.TryGetValue(key, out var value) ? value.ToString() : null;
     }
     }
  }
  }