といってもASP.NET MVCフレームワークが提供するModelBinderのおかげで実際のコードは至極簡単だ。
-HomeController.cs-
[AcceptVerbs(Http.Post)] public ActionResult Index(Clip clip) { // code here... }
ControllerのActionの引数をclassにしておくだけで、フレームワークがReflectionなどを駆使してポストされた値とActionの引数classのパラメータ名を比較してデータを格納していってくれる。
さらに、値を格納してくれるついでにclassのプロパティとポストされた内容を比較し、ポストされた内容に明らかな間違い(intプロパティに文字列が入力されていたり)や不足分があるようだとModelStateにErrorとして追加してくれるわけだ。これはかなりの親切設計なので大体は役に立つのだが、たまに邪魔になるときがある。そんなときのために、値の格納・検証を行わないようActionの引数classへ指定する方法がある。それが下記の属性だ。
-HomeController.cs-
[AcceptVerbs(Http.Post)] public ActionResult Index([Bind(Exclude = "Id,Position")]Clip clip) { // code here... }
Clipクラスに指定されているBind属性を見て欲しい。上記の例は、Clip.IdとClip.Positionの二つのプロパティの格納・検証を無視するように指定している。これでポスト内容にIdとPositionがなくともModelStateにErrorが追加されることはなくなった。
0 件のコメント:
コメントを投稿