回答編集履歴

4

追記3

2016/08/18 05:59

投稿

shika358
shika358

スコア122

test CHANGED
@@ -112,8 +112,116 @@
112
112
 
113
113
 
114
114
 
115
-
115
+ --追記3----
116
+
116
-
117
+ バリデーションメッセージが表示されない点に関しては
118
+
117
-
119
+ 非同期での更新なので仕方がないと思います。
120
+
121
+
122
+
118
-
123
+ フロントエンドにメッセージを表示するなら
124
+
119
-
125
+ いくつか方法があるかと思います
126
+
127
+
128
+
129
+ 恐らく仰る内容のバリデーションなら
130
+
131
+ ASP.NET MVCのクライアントサイド検証を有効にすれば可能だと思います
132
+
133
+ ※DataAnnotationsに沿ったエラーをフロントエンドでも出力します
134
+
135
+ http://blog.shibayan.jp/entry/20110331/1301502049
136
+
137
+ http://www.atmarkit.co.jp/fdotnet/aspnetmvc3/aspnetmvc3_04/aspnetmvc3_04_03.html
138
+
139
+
140
+
141
+
142
+
143
+ 要約するとWeb.configで以下の記述があること
144
+
145
+ ```
146
+
147
+ <configuration>
148
+
149
+ <appSettings>
150
+
151
+ <add key="ClientValidationEnabled" value="true" />
152
+
153
+ <add key="UnobtrusiveJavaScriptEnabled" value="true" />
154
+
155
+ </appSettings>
156
+
157
+ </configuration>
158
+
159
+ ```
160
+
161
+
162
+
163
+ フロントエンドで
164
+
165
+ ```
166
+
167
+ <script src="~/Scripts/jquery-x.x.x.min.js"></script>
168
+
169
+ <script src="~/Scripts/jquery.validate.min.js"></script>
170
+
171
+ <script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>
172
+
173
+ ```
174
+
175
+
176
+
177
+ の読み込みがあれば有効になります。
178
+
179
+
180
+
181
+ その状態でsubmitすると
182
+
183
+ ```
184
+
185
+ @Html.ValidationSummary(true)
186
+
187
+ @Html.ValidationMessageFor(x => x.field)
188
+
189
+ ```
190
+
191
+
192
+
193
+ のヘルパーで表示されるHTMLにエラーが吐かれます
194
+
195
+
196
+
197
+ しかしながら、ajaxなのでsubmitするわけにもいかないと思いますので
198
+
199
+ 別途、クライアントサイド検証を実行する必要があります
200
+
201
+ なので
202
+
203
+ ```
204
+
205
+ function Quotation_save() {
206
+
207
+ ```
208
+
209
+ の中で
210
+
211
+ ```
212
+
213
+ if($('form').valid()) return;
214
+
215
+ ```
216
+
217
+ とすればクライアントサイド検証が実行されます。
218
+
219
+
220
+
221
+ $('form').valid()で検証の実施
222
+
223
+ その戻り値には検証OKならtrue、NGならfalseが入ります
224
+
225
+
226
+
227
+

3

書式の修正

2016/08/18 05:59

投稿

shika358
shika358

スコア122

test CHANGED
@@ -68,21 +68,21 @@
68
68
 
69
69
  コメントの
70
70
 
71
- ----
71
+ ----
72
72
 
73
73
  Required属性を定義した項目がNullの場合、ModelState.IsValidが"false"となり、データ更新がされません。
74
74
 
75
75
  Required属性を定義していない項目がNullの場合は、想定通りデータ更新が可能。
76
76
 
77
- ----
77
+ ----
78
78
 
79
79
  で目的の
80
80
 
81
- ----
81
+ ----
82
82
 
83
83
  当該項目が未入力の状態ではデータを保存できないようにしたいです。
84
84
 
85
- ----
85
+ ----
86
86
 
87
87
  は実現できているように思えるのですがいかがでしょうか。
88
88
 
@@ -90,11 +90,11 @@
90
90
 
91
91
  他に問題点としてあげている
92
92
 
93
- ----
93
+ ----
94
94
 
95
95
  本来であれば、DB更新時に必須項目が未入力の場合はエラーメッセージが表示されると思うのですが、 エラーメッセージが何も表示されないまま、DB更新後に遷移させるIndex画面へ遷移してしまう。
96
96
 
97
- ----
97
+ ----
98
98
 
99
99
  の「DB更新後に遷移させるIndex画面へ~」に関しては
100
100
 

2

コメントをうけ追記2

2016/08/18 01:17

投稿

shika358
shika358

スコア122

test CHANGED
@@ -61,3 +61,59 @@
61
61
  ```
62
62
 
63
63
  はどういう結果でしょうか。
64
+
65
+
66
+
67
+ --追記2----
68
+
69
+ コメントの
70
+
71
+ ----
72
+
73
+ Required属性を定義した項目がNullの場合、ModelState.IsValidが"false"となり、データ更新がされません。
74
+
75
+ Required属性を定義していない項目がNullの場合は、想定通りデータ更新が可能。
76
+
77
+ ----
78
+
79
+ で目的の
80
+
81
+ ----
82
+
83
+ 当該項目が未入力の状態ではデータを保存できないようにしたいです。
84
+
85
+ ----
86
+
87
+ は実現できているように思えるのですがいかがでしょうか。
88
+
89
+
90
+
91
+ 他に問題点としてあげている
92
+
93
+ ----
94
+
95
+ 本来であれば、DB更新時に必須項目が未入力の場合はエラーメッセージが表示されると思うのですが、 エラーメッセージが何も表示されないまま、DB更新後に遷移させるIndex画面へ遷移してしまう。
96
+
97
+ ----
98
+
99
+ の「DB更新後に遷移させるIndex画面へ~」に関しては
100
+
101
+ ```
102
+
103
+ return Json(new { Success = 1, ex = "ModelState is Invalid" });
104
+
105
+ ```
106
+
107
+ Successの値が問題かと思います
108
+
109
+
110
+
111
+ 私が問題点を正確に把握できておらず、的外れでしたらご指摘ください。
112
+
113
+
114
+
115
+
116
+
117
+
118
+
119
+

1

コメントをうけ追記

2016/08/18 01:16

投稿

shika358
shika358

スコア122

test CHANGED
@@ -19,3 +19,45 @@
19
19
 
20
20
 
21
21
  DataAnnotationsに対して、DBに登録できるか否かは別問題と考えた方が良いと思います。
22
+
23
+
24
+
25
+ -- 追記 ----
26
+
27
+ ajaxでやっているんですね、ですと
28
+
29
+ ```
30
+
31
+ @Html.ValidationSummary(true)
32
+
33
+ ```
34
+
35
+ は使えなさそうですね。
36
+
37
+
38
+
39
+ 未入力項目が"null"の場合
40
+
41
+ ```
42
+
43
+ if (result.Success == "1") {
44
+
45
+ window.location.href = "/QuotationMains/index";
46
+
47
+ }else {
48
+
49
+ alert(result.ex);
50
+
51
+ }
52
+
53
+ ```
54
+
55
+
56
+
57
+ ```
58
+
59
+ if (ModelState.IsValid)
60
+
61
+ ```
62
+
63
+ はどういう結果でしょうか。