CodeZine(コードジン)

特集ページ一覧

Webフォームモデルバインディング パート2:データのフィルタリング (ASP.NET vNextシリーズ)

連載:ScottGu's Blog翻訳

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2011/12/02 14:00

目次

クエリ文字列パラメータを使用したフィルタリング

 では、アプリケーションにいくつか基本的なフィルタリングを追加してみましょう。具体的には、製品名にキーワードが含まれているかどうかで、ユーザーが製品結果をフィルタリングできるようにします。クエリ文字列パラメータを使って、キーワードを設定します。例えば、以下では名前に『chef』という言葉が入った製品だけを表示するようにします。

 もしキーワードが指定されていなければ、以前のようにすべての製品が表示されるようにします。

GetProductsメソッドの更新

 フィルタリングを有効化するために、以下のように、キーワードパラメータが取れるようにGetProductsメソッドを更新します。

public IQueryable<Product> GetProducts([QueryString]string keyword)
{
    IQueryable<Product> query = db.Products;
    if (!String.IsNullOrWhiteSpace(keyword))
    {
        query = query.Where(p => p.ProductName.Contains(keyword));
    }
    return query;
}

 もしキーワードがないかNullの場合、メソッドはデータベースにあるすべての製品を返します。もしキーワードが設定されていれば、そのキーワードが名前に含まれている製品だけが表示されるように、クエリ結果をさらにフィルタリングします。

Value Providerの理解

 上記のコードで1つお気づきになる点が、キーワードメソッド引数に適用した[QueryString]属性だと思います。これは、モデルバインディングシステムが、必要に応じて型変換も行い、実行時にそのクエリ文字列からの値をこのパラメータに『バインド』させるものです。

 ユーザーの値のこれらのソースを、『Value Provider』と呼び、どのValue Providerを使用するのかを、モデルバインディングシステムに指示するパラメータ属性を、『Value Provider Attributes』と呼びます。次期バージョンのWebフォームは、Webフォームアプリケーションでユーザーが入力に使用するすべてのValue Provider(クエリ文字列、クッキー、フォームの値、コントロール、ViewState、セッション、プロフィールなど)と、それぞれに対応した属性とが一緒に渡されます。Value Providerをカスタマイズすることも可能です。カスタマイズしたValue Providerは、WebフォームでもMVCでも動作します。

 デフォルトでは、パラメータ名は、Value Providerコレクションのキーとして使用されるので、今回のケースでは、~/Products.aspx?keyword=chefのように、クエリ文字列の中でキーとなる『keyword』のあるものが値になります。これは、パラメータ属性の引数として引き渡すキーを簡単にオーバーライドできます。

 例えば、よくある『q』というクエリ文字列を、キーワードの指定に使用します。

public IQueryable<Product> GetProducts([QueryString("q")]string keyword)

 そうすると、クエリ文字列を通じてキーワードを引き渡すことで、表示された結果をフィルタリングできます。

 もしこれを今までどおりに行おうとすると、非常に長いコードになります。値を読み込んで、Nullでないかをチェックし、必要な型に変換し、その変換が成功かどうかをチェックするなどです。ページングやソートをこれと統合するとなると(編集のサポートは除外して)より一層複雑になります。モデルバインディングシステムは、このようなコードを書く必要性を減少させることが目的で、必要なときはアプリケーションを通じてクリーンに再利用できるようにします。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

連載:Scott Guthrie氏 Blog翻訳

もっと読む

著者プロフィール

  • WINGSプロジェクト Chica(チカ)

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂...

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5