【訳】MVC 3 20秘方-(3)ユーザの入力を検証する

10808 ワード

シーンフォームで取得したデータに、データベースまたはモデル設計に基づいて予想されるデータが含まれていることを確認します.
ソリューション
.NET 4.0には、いくつかの有用なメタデータ属性クラスを提供する新しいデータ注釈ネーミングスペースが含まれています.これらのクラスはMVC 3に適用されている.
検証フォーム入力では、次の属性クラスを使用して、RequiredAttribute、RegularExpressionAttribute、RangeAttribute、DataType Attributeなど、さまざまな検証オプションを提供できます.カスタム検証が必要な場合、MVCの3は、開発者が定義した検証を許可するValidationAttributeクラスの改善もサポートします.
ディスカッション
次の例は、前の「秘方」で作成された「code-first book」モデルを拡張します.
このモデルは、次の条件で更新されます.
1.本のタイトルは必須
2.ISBNは合法的
3.本の要約は必須
4.著者は必須
5.合法的な価格(ドル)
6.合法的な出版日
以上の6つの検証のうち5つはMVC 3の組み込み方法で行うことができる.ただし、5番目の検証には異なるフォーマットが必要です.カスタム検証方法が必要です.
 public class Book
{
public int ID { get; set; }
[Required]
public string Title { get; set; }
[Required]
[IsbnValidation]
public string Isbn { get; set; }
[Required]
public string Summary { get; set; }
[Required]
public string Author { get; set; }
public string Thumbnail { get; set; }
[Range(1, 100)]
public double Price { get; set; }
[DataType(DataType.Date)]
[Required]
public DateTime Published { get; set; }
}
public class BookDBContext : DbContext
{
public DbSet<Book> Books { get; set; }
}

 
上記の例では、[Required]データ注釈が各フィールドに付加され、このフィールドがユーザによって提供される必要があることを示している.ISBN number上の[IsbnValidation]プロパティも追加する、MVC 3 IsbnValidationがIsValidオペレーションを呼び出す必要があることを通知する、このオペレーションは間もなく作成される.価格を検証するために,[Range]注記を適用した.価格の検証は正規表現特性[RegularExpression]で行うこともできます.
次のようになります.
[RegularExpression (@"(\b[\d\.]*)")]
public double Price { get; set; }
最後に、published date(出版日)の検証について、DataTypeプロパティはMVCにこのフィールドのタイプが日付タイプであることを示します.
 
合法的なISBNの定義は、10~13文字です.なぜ合理的な組織コードなのか、カスタム検証クラスは別のフォルダに配置されます.
項目を右クリック:追加->新規フォルダ.このフォルダの名前はValidationsです.このフォルダを右クリックします.クラスを追加:IsbnValidationAttribute.cs
コードは次のとおりです.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Text.RegularExpressions;

namespace MvcApplication.Validations
{
[AttributeUsage(AttributeTargets.Field |
AttributeTargets.Property, AllowMultiple = false,
Inherited = true)]
public class IsbnValidationAttribute :
System.ComponentModel.DataAnnotations.ValidationAttribute
{
/**
* This class is courtesy:
*
http://www.java2s.com/Open-Source/CSharp/
* Inversion-of-Control-Dependency-Injection/Spring.net/
* Spring/Validation/Validators/ISBNValidator.cs.htm
*
* This class is used for demonstration purposes
* of performing an ISBN validation. Should you
* wish to use this in your project, please
* consult the license agreement here:
*
http://www.apache.org/licenses/LICENSE-2.0
*
*/
private static readonly String SEP = "(?:\\-|\\s)";
private static readonly String GROUP = "(\\d{1,5})";
private static readonly String PUBLISHER = "(\\d{1,7})";
private static readonly String TITLE = "(\\d{1,6})";
static readonly String ISBN10_PATTERN =
"^(?:(\\d{9}[0-9X])|(?:" + GROUP + SEP + PUBLISHER +
SEP + TITLE + SEP + "([0-9X])))$";
static readonly String ISBN13_PATTERN =
"^(978|979)(?:(\\d{10})|(?:" + SEP + GROUP + SEP +
PUBLISHER + SEP + TITLE + SEP + "([0-9])))$";
public IsbnValidationAttribute() :
base("Invalid ISBN number")
{
}
public override bool IsValid(object value)
{
// Convert to string and fix up the ISBN
string isbn = value.ToString();
string code = (isbn == null)
? null :
isbn.Trim().Replace("-", "").Replace("", "");
// check the length
if ((code == null) || (code.Length < 10
|| code.Length > 13))
{
return false;
}
// validate/reformat using regular expression
Match match;
String pattern;
if (code.Length == 10)
{
pattern = ISBN10_PATTERN;
}
else
{
pattern = ISBN13_PATTERN;
}
match = Regex.Match(code, pattern);
return match.Success && match.Index == 0 &&
match.Length == code.Length;
}
}
}

このクラスを作成したらbookに覚えておいてください.cs名前空間参照の追加:using MvcApplication.Validations;
上記の例には、標準的なISBN検証が含まれています.この検証はCSharp Open Source exampleから来た.ISBNが2つの正規表現のうちの1つに合致する場合.検証関数はtrueを返します.そうでなければfalseを返します.ユーザーの再入力が必要
ブラウザで図書作成ページに移動すると.コミットボタンをクリックすると検証がトリガーされます.
 
関連項目:
DataAnnotations Namespace
 
翻訳者注:
ユーザー検証については、クライアント/サーバ側の検証をサポートする方法がさらにあります.
翻訳なので、できるだけ原作と一致し、他の検証方法については後続の他のシリーズで書きます.