[翻訳]ASP.NET MVC 3が開発した20の秘訣(3)[20 Recipes for Programming MVC 3]:ユーザー入力の検証
12129 ワード
議題
フォームに入力された内容がデータベースとモデル設計のタイプに一致することを保証するために、設計時に検証を追加します.
ソリューション
はい.NET 4.0のMVC 3には、新しいネーミングスペースDataAnnotationsが含まれており、多くの有用なメタデータ属性が提供されています.フォームの入力を検証するには、次の属性クラスでは、RequireAttribute、RegularExpressionAttribute、DataTypeAttributeなど、さまざまな検証方法を提供します.入力しなければならない内容を定義する必要がある場合、MVC 3は開発者が改善されたValidationAttributeクラスを通じて検証を定義することをサポートする.
ディスカッション
以前のコード優先の秘訣でBookモデルを作成し、次の更新を行います.書名を入力します. ISBDを入力して検証する. 書籍の概要を入力します. 書籍の著者を入力します. 書籍の価格(ドル)を入力し、検証します. 出版時間を入力して検証します.
6つの入力項目のうち5つの検証はMVC 3の組み込み検証方法でカスタマイズできる.しかし、ISBNのフォーマットには異なる検証方法が必要です.カスタム検証方法:
上記の例では、[Require]プロパティによって、ユーザーがフィールドを入力する必要があることを識別します.IsbnValidationAttributeクラスにIsValid属性を追加し、操作時にMVC 3呼び出しを通知する必要があります.価格を検証するために、Priceフィールドに[Range]クラスを追加し、[RegularExpression]プロパティを次のように設定します.
最後に、DataType属性を定義してMVCに、publishedメンバータイプが時間タイプであることを伝える.現在のIsbnValidationクラスでは、認証時にエラーは表示されません.次に、それを実装します.
ISBNの有効長は10〜13文字である.より良い組織コードのために、カスタム検証コードおよびその他の検証コードファイルを別のフォルダに保存します.アイテムを右クリックし、「追加」->「新規フォルダ」を選択し、フォルダの名前を「Validations」に変更します.次に「追加」->「クラス」を選択し、「IsbnValidationAttribute.cs」、このクラスはValidationAttributeクラスを継承し、IsValidメソッドを書き換えて入力されたISBNの内容を検証します.
上記の例は、C#オープンソースの例がISBN標準検証プログラムを含むものである.IsValidメソッドは2つの検証ルールに一致し、パスするとTrueが返されます.そうしないとFalseが返され、ユーザーに再入力が要求されます.
書籍作成ページにアクセスしてコミットすると、すべての入力項目が正しいデータを入力するまで、上記のエラーメッセージが表示されます.この検出が通るか否かはModelStateを判断する.IsValid属性がTrueであるかどうか.
リファレンス情報
DataAnnotations Namespace 原書の住所 ブックソース
フォームに入力された内容がデータベースとモデル設計のタイプに一致することを保証するために、設計時に検証を追加します.
ソリューション
はい.NET 4.0のMVC 3には、新しいネーミングスペースDataAnnotationsが含まれており、多くの有用なメタデータ属性が提供されています.フォームの入力を検証するには、次の属性クラスでは、RequireAttribute、RegularExpressionAttribute、DataTypeAttributeなど、さまざまな検証方法を提供します.入力しなければならない内容を定義する必要がある場合、MVC 3は開発者が改善されたValidationAttributeクラスを通じて検証を定義することをサポートする.
ディスカッション
以前のコード優先の秘訣でBookモデルを作成し、次の更新を行います.
6つの入力項目のうち5つの検証はMVC 3の組み込み検証方法でカスタマイズできる.しかし、ISBNのフォーマットには異なる検証方法が必要です.カスタム検証方法:
using System;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;
using System.ComponentModel.DataAnnotations;
using MvcApplication4.Validations;
namespace MvcApplication4.Models
{
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; }
}
}
上記の例では、[Require]プロパティによって、ユーザーがフィールドを入力する必要があることを識別します.IsbnValidationAttributeクラスにIsValid属性を追加し、操作時にMVC 3呼び出しを通知する必要があります.価格を検証するために、Priceフィールドに[Range]クラスを追加し、[RegularExpression]プロパティを次のように設定します.
[Range(1, 100)]
[RegularExpression(@"(\b[\d\.]*)")]
public double Price { get; set; }
最後に、DataType属性を定義してMVCに、publishedメンバータイプが時間タイプであることを伝える.現在のIsbnValidationクラスでは、認証時にエラーは表示されません.次に、それを実装します.
ISBNの有効長は10〜13文字である.より良い組織コードのために、カスタム検証コードおよびその他の検証コードファイルを別のフォルダに保存します.アイテムを右クリックし、「追加」->「新規フォルダ」を選択し、フォルダの名前を「Validations」に変更します.次に「追加」->「クラス」を選択し、「IsbnValidationAttribute.cs」、このクラスはValidationAttributeクラスを継承し、IsValidメソッドを書き換えて入力されたISBNの内容を検証します.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Text.RegularExpressions;
namespace MvcApplication4.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;
}
}
}
上記の例は、C#オープンソースの例がISBN標準検証プログラムを含むものである.IsValidメソッドは2つの検証ルールに一致し、パスするとTrueが返されます.そうしないとFalseが返され、ユーザーに再入力が要求されます.
書籍作成ページにアクセスしてコミットすると、すべての入力項目が正しいデータを入力するまで、上記のエラーメッセージが表示されます.この検出が通るか否かはModelStateを判断する.IsValid属性がTrueであるかどうか.
リファレンス情報
DataAnnotations Namespace 原書の住所 ブックソース