Model注記のバックグラウンド原理
1679 ワード
Asp.NetMVCの検証特性は,モデルバインディング,モデルメタデータ,モデル検証器,モデル状態からなる協調システムの一部である.
1.検証とモデルバインド
デフォルトではAsp.NetMVCフレームワークはモデルバインディング石で検証ロジックを実行し、操作方法にパラメータがある場合、モデルバインディングは暗黙的に実行する
コントローラのUpdateModelメソッドまたはTryUpdateModelメソッドで表示される実行モデルバインドも使用できます.
モデルバインドは、新しい値を使用してモデル属性の更新を完了すると、現在のモデルメタデータを使用してモデルのすべての検証器を取得します.Asp.NetMVCの実行時には、データ注釈とともに動作するベリファイア(DataAnnotationsModelValidator)が提供されます.このモデル検証器は、すべての検証プロパティを見つけ、タワーゲートに含まれる検証ロジックを実行します.モデルバインダは、失敗したすべての検証ルールをキャプチャし、モデルステータスに入れます.
2.検証とモデルのステータス
モデルバインドの主な副産物はモデル状態である(Controller派生クラスオブジェクトのModelState属性でアクセス可能).モデルステータスには、ユーザーのすべてのアイテムがモデルプロパティに格納される値だけでなく、各プロパティに関連付けられたすべてのエラー(モデルオブジェクト自体に関連するすべてのエラー)も含まれます.モデル状態でエラーが発生した場合、ModelState.IsValidはFasleに戻ります.
実行時にモデルステータスに検証エラー情報を自動的に注入するように、モデルステータスからエラー情報を自動的に抽出することもできます.
コントローラの操作で通常関心が必要な問題は、モデルのステータスが有効かどうかです.
1.検証とモデルバインド
デフォルトではAsp.NetMVCフレームワークはモデルバインディング石で検証ロジックを実行し、操作方法にパラメータがある場合、モデルバインディングは暗黙的に実行する
[HttpPost]
Public ActionResult Create(Album album)
{
// todo.....
}
コントローラのUpdateModelメソッドまたはTryUpdateModelメソッドで表示される実行モデルバインドも使用できます.
[HttpPost]
Public ActionResult Eidt(int id, FormCollection collection)
{
Var album = storeDB.Album.Find(id);
if (TryUpdateModel(album))
{
//todo.....
}
}
モデルバインドは、新しい値を使用してモデル属性の更新を完了すると、現在のモデルメタデータを使用してモデルのすべての検証器を取得します.Asp.NetMVCの実行時には、データ注釈とともに動作するベリファイア(DataAnnotationsModelValidator)が提供されます.このモデル検証器は、すべての検証プロパティを見つけ、タワーゲートに含まれる検証ロジックを実行します.モデルバインダは、失敗したすべての検証ルールをキャプチャし、モデルステータスに入れます.
2.検証とモデルのステータス
モデルバインドの主な副産物はモデル状態である(Controller派生クラスオブジェクトのModelState属性でアクセス可能).モデルステータスには、ユーザーのすべてのアイテムがモデルプロパティに格納される値だけでなく、各プロパティに関連付けられたすべてのエラー(モデルオブジェクト自体に関連するすべてのエラー)も含まれます.モデル状態でエラーが発生した場合、ModelState.IsValidはFasleに戻ります.
実行時にモデルステータスに検証エラー情報を自動的に注入するように、モデルステータスからエラー情報を自動的に抽出することもできます.
コントローラの操作で通常関心が必要な問題は、モデルのステータスが有効かどうかです.