WebMatrix 2 というか Web Pages 2 で入力値の検証周りが大幅に使いやすくなりました。ASP.NET MVC ではアノテーションベースの検証を行うのが普通ですが、Classic ASP や PHP ではモデルクラス作ってとかせずに、基本的には POST 値を直接参照するのが普通ですよね。
まあ、ごちゃごちゃ言わずに実際にコード見ながら試していきましょう。Web Pages 2 では cshtml の基本クラスの WebPage クラスに Validation というプロパティが追加されました。中身は ValidationHelper というクラスで、こいつが面倒な検証周りを自動で行ってくれます。
とりあえずコードを見てください。
@{ Validation.RequireFields("name"); Validation.Add("level", Validator.Integer(), Validator.Range(0, 100)); if (IsPost) { Validation.Validate(); } } <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <title></title> </head> <body> <form method="post"> <label for="name">名前</label> <input type="text" name="name" /> @Html.ValidationMessage("name") <br /> <label for="level">レベル</label> <input type="text" name="level" /> @Html.ValidationMessage("level") <br /> <input type="submit" value="送信" /> </form> </body> </html>
とりあえず先頭のコードブロックに注目してください。Web Pages 2 では、ここで検証の設定を全て行ってしまいます。
流れとしては RequireField/RequireFields で必須かどうか、Add でフィールドごとにさらに細かい検証設定を、POST された時には Validate で検証を行っています。エラーメッセージはお馴染みの Html.ValidationMessage で出力です。
必須設定は単純なのでいいのですが、Add ではフィールド名と可変個の IValidator を実装したクラスのインスタンスを受け取るようになっています。IValidator はそれぞれが 1 つの検証機能を持っているので、複数個組み合わせることで目的の検証機能を組み上げることが出来るというわけです。使える部品は全て Validator クラスの静的プロパティとして実装されているので、これを使うようにしてください。
それでは実際に試してみます。WebMatrix の画面から [Run] をクリックすると起動するので、フォームに真実の値を入れました。それでは送信してみましょう。
ちゃんとエラーが表示されました。このサンプルではレベルに 0 から 100 までの値しか入力できない設定なので正しい動作ですね。
そして名前を空に、レベルに数値以外を入力してもちゃんとエラーが表示されます。ASP.NET MVC とは全然やり方が違いますが、あらかじめ一括で定義できるのは非常に使いやすく便利だと思います。
そろそろ PHP 以外の選択肢として考えてもいいんじゃないでしょうか?