回答編集履歴

1

追記

2019/01/08 08:33

投稿

退会済みユーザー
test CHANGED
@@ -39,3 +39,61 @@
39
39
  MVC モデルのバリデーションについて
40
40
 
41
41
  [https://teratail.com/questions/80391](https://teratail.com/questions/80391)
42
+
43
+
44
+
45
+ **【追記】**
46
+
47
+
48
+
49
+ 下の 2019/01/08 17:21 の私のコメントで「回答欄に追記します」と書きましたが、それを以下に書きます。
50
+
51
+
52
+
53
+ > ValidationResultをPostで判定する方法はありますか?
54
+
55
+
56
+
57
+ そもそも、サーバー側での検証は、GET 側のアクションメソッドで初期画面が表示された後、それが POST された時でないとかからないです。
58
+
59
+
60
+
61
+ 基本は以下のコードの通りで、モデルバインディングの際にモデルに付与したデータアノテーション属性によって検証が行われ、検証結果が OK の場合は ModelState.IsValid が true に、NG の場合は false になります。
62
+
63
+
64
+
65
+ ```
66
+
67
+ [HttpPost]
68
+
69
+ [ValidateAntiForgeryToken]
70
+
71
+ public ActionResult Create([Bind(Include = "No, Project")] TestViewModel model)
72
+
73
+ {
74
+
75
+ if (ModelState.IsValid)
76
+
77
+ {
78
+
79
+ // INSERT 処理
80
+
81
+ return RedirectToAction("Index");
82
+
83
+ }
84
+
85
+
86
+
87
+ return View(model);
88
+
89
+ }
90
+
91
+ ```
92
+
93
+
94
+
95
+ 上のコードのように、ModelState.IsValid が true の場合は DB への登録などの処置を行って別のページにリダイレクト、false の場合は retrun View(model); としユーザーに訂正と再送を促すというのが普通のパターンです。
96
+
97
+
98
+
99
+ 検証 NG で retrun View(model); とするのはちゃんと理由があって、POST されてきたユーザー入力をそのまま(間違っていても間違ったまま)表示して、間違っている箇所にはエラーメッセ―ジを表示し、訂正を容易にするためです。