SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Scott Guthrie氏 Blog翻訳

Webフォームモデルバインディング パート3:更新と検証 (ASP.NET 4.5シリーズ)

連載:ScottGu's Blog翻訳


モデルの検証

 当然、ほとんどのデータモデルには、検証ルールのタイプがいくつか含まれています。これを促進させるために、Webフォーム上のモデルバインディングシステムは、ASP.NET Dynamic Data、MVC、Entity Framework、Silverlight RIA Servicesが行っているように、System.ComponentModel.DataAnnotations名前空間にある同じ検証属性を使ったモデル検証をサポートしています。それらの属性をモデルクラス上のプロパティに加えることで、値が必要なプロパティや有効な値の範囲などの詳細情報が含まれたモデルの『shape』が提供できるようになります。

 データベースのスキーマに合った検証情報でProductクラスを更新しましょう。

 これを行うために、Productクラスに次の属性を加えます。

public class Product
{
    public int ProductID { get; set; }

    [Required, StringLength(40)]
    public string ProductName { get; set; }

    [StringLength(20)]
    public string QuantityPerUnit { get; set; }

    [DataType(DataType.Currency)]
    public decimal? UnitPrice { get; set; }

    public short? UnitsInStock { get; set; }        
    public short? UnitsOnOrder { get; set; }
    public short? ReorderLevel { get; set; }        
    public bool Discontinued { get; set; }
    public int? CategoryID { get; set; }
    public virtual Category Category { get; set; }
}

 このタイプに値がモデルバインドされたので、Webフォームのモデルバインディングシステムは、ページのModelStateプロパティで、いずれかの検証ルールが違反されていないかどうか追跡を行います。そうすれば、保存する前に、モデルが有効かどうかを明示的に確認できます。

public void UpdateProduct(int productId)
{
    var product = _db.Products.Find(productId);

    TryUpdateModel(product);

    // Check whether there were any validation errors
    if (ModelState.IsValid)
    {
        _db.SaveChanges();
    }            
}

 値が無効な場合にページにモデルのエラーを表示するには、<asp:ValidationSummary>コントロールのShowModelStateErrorsプロパティを『true』に設定して追加します。

<asp:ValidationSummary runat="server" ShowModelStateErrors="true" />

 これで無効な値でレコードを更新された場合、GridViewは編集モードのままで、モデルのエラーメッセージが、ValidationSummaryにより表示されます。

 検証属性ではカバーされていないようなエラー状態を表示するために、独自または特定のエラーメッセージをそのページのModelStateに追加することも可能です。ASP.NET MVCコントローラと同じように、ページ内の検証コントロールが必要な独自のエラーメッセージを紐づけることのできる『ModelState』プロパティが、WebフォームのPage基本クラスに追加されています。

モデリングバインディングとフィルタリングのQuick Video

 Damian Edwards氏は、モデルバインディングによる更新シナリオを実装するため方法を、90秒ビデオで公開しています。それは、ここから見れます。

まとめ

 ASP.NET Web Forms 4.5のモデルバインディングシステムでは、コードにフォーカスしたデータアクセスの枠組みを使用しており、データおよびユーザーの入力の扱いが簡単になります。ASP.NET MVCで最初に導入したモデルバインディング概念をいくつか採用し、モデルオブジェクトに検証ビヘイビアを適用するために、MVCおよびWebフォームのどちらにおいてもDataAnnotation属性を使用する統一された方法をサポートしています。ここでお見せするテクニックはすべて、FormView、DetailsView、ListViewを含むASP.NET Webフォームにあるその他のデータコントロールにも同じく適用できます。

 Hope this helps,

 Scott

 P.S. ブログ以外に、Twitterを使って簡単な更新やリンク共有を行っています。私のハンドル名は、@scottguです。

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
Scott Guthrie氏 Blog翻訳連載記事一覧

もっと読む

この記事の著者

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

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Scott Guthrie(Scott Guthrie)

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/6262 2011/12/12 10:56

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー