teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

4

追記3

2016/08/18 05:59

投稿

shika358
shika358

スコア122

answer CHANGED
@@ -55,5 +55,59 @@
55
55
 
56
56
  私が問題点を正確に把握できておらず、的外れでしたらご指摘ください。
57
57
 
58
+ --追記3----
59
+ バリデーションメッセージが表示されない点に関しては
60
+ 非同期での更新なので仕方がないと思います。
58
61
 
62
+ フロントエンドにメッセージを表示するなら
63
+ いくつか方法があるかと思います
59
64
 
65
+ 恐らく仰る内容のバリデーションなら
66
+ ASP.NET MVCのクライアントサイド検証を有効にすれば可能だと思います
67
+ ※DataAnnotationsに沿ったエラーをフロントエンドでも出力します
68
+ http://blog.shibayan.jp/entry/20110331/1301502049
69
+ http://www.atmarkit.co.jp/fdotnet/aspnetmvc3/aspnetmvc3_04/aspnetmvc3_04_03.html
70
+
71
+
72
+ 要約するとWeb.configで以下の記述があること
73
+ ```
74
+ <configuration>
75
+ <appSettings>
76
+ <add key="ClientValidationEnabled" value="true" />
77
+ <add key="UnobtrusiveJavaScriptEnabled" value="true" />
78
+ </appSettings>
79
+ </configuration>
80
+ ```
81
+
82
+ フロントエンドで
83
+ ```
84
+ <script src="~/Scripts/jquery-x.x.x.min.js"></script>
85
+ <script src="~/Scripts/jquery.validate.min.js"></script>
86
+ <script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>
87
+ ```
88
+
89
+ の読み込みがあれば有効になります。
90
+
91
+ その状態でsubmitすると
92
+ ```
93
+ @Html.ValidationSummary(true)
94
+ @Html.ValidationMessageFor(x => x.field)
95
+ ```
96
+
97
+ のヘルパーで表示されるHTMLにエラーが吐かれます
98
+
99
+ しかしながら、ajaxなのでsubmitするわけにもいかないと思いますので
100
+ 別途、クライアントサイド検証を実行する必要があります
101
+ なので
102
+ ```
103
+ function Quotation_save() {
104
+ ```
105
+ の中で
106
+ ```
107
+ if($('form').valid()) return;
108
+ ```
109
+ とすればクライアントサイド検証が実行されます。
110
+
111
+ $('form').valid()で検証の実施
112
+ その戻り値には検証OKならtrue、NGならfalseが入ります
113
+

3

書式の修正

2016/08/18 05:59

投稿

shika358
shika358

スコア122

answer CHANGED
@@ -33,20 +33,20 @@
33
33
 
34
34
  --追記2----
35
35
  コメントの
36
- ----
36
+ ----
37
37
  Required属性を定義した項目がNullの場合、ModelState.IsValidが"false"となり、データ更新がされません。
38
38
  Required属性を定義していない項目がNullの場合は、想定通りデータ更新が可能。
39
- ----
39
+ ----
40
40
  で目的の
41
- ----
41
+ ----
42
42
  当該項目が未入力の状態ではデータを保存できないようにしたいです。
43
- ----
43
+ ----
44
44
  は実現できているように思えるのですがいかがでしょうか。
45
45
 
46
46
  他に問題点としてあげている
47
- ----
47
+ ----
48
48
  本来であれば、DB更新時に必須項目が未入力の場合はエラーメッセージが表示されると思うのですが、 エラーメッセージが何も表示されないまま、DB更新後に遷移させるIndex画面へ遷移してしまう。
49
- ----
49
+ ----
50
50
  の「DB更新後に遷移させるIndex画面へ~」に関しては
51
51
  ```
52
52
  return Json(new { Success = 1, ex = "ModelState is Invalid" });

2

コメントをうけ追記2

2016/08/18 01:17

投稿

shika358
shika358

スコア122

answer CHANGED
@@ -29,4 +29,31 @@
29
29
  ```
30
30
  if (ModelState.IsValid)
31
31
  ```
32
- はどういう結果でしょうか。
32
+ はどういう結果でしょうか。
33
+
34
+ --追記2----
35
+ コメントの
36
+ ----
37
+ Required属性を定義した項目がNullの場合、ModelState.IsValidが"false"となり、データ更新がされません。
38
+ Required属性を定義していない項目がNullの場合は、想定通りデータ更新が可能。
39
+ ----
40
+ で目的の
41
+ ----
42
+ 当該項目が未入力の状態ではデータを保存できないようにしたいです。
43
+ ----
44
+ は実現できているように思えるのですがいかがでしょうか。
45
+
46
+ 他に問題点としてあげている
47
+ ----
48
+ 本来であれば、DB更新時に必須項目が未入力の場合はエラーメッセージが表示されると思うのですが、 エラーメッセージが何も表示されないまま、DB更新後に遷移させるIndex画面へ遷移してしまう。
49
+ ----
50
+ の「DB更新後に遷移させるIndex画面へ~」に関しては
51
+ ```
52
+ return Json(new { Success = 1, ex = "ModelState is Invalid" });
53
+ ```
54
+ Successの値が問題かと思います
55
+
56
+ 私が問題点を正確に把握できておらず、的外れでしたらご指摘ください。
57
+
58
+
59
+

1

コメントをうけ追記

2016/08/18 01:16

投稿

shika358
shika358

スコア122

answer CHANGED
@@ -8,4 +8,25 @@
8
8
  のように、DataAnnotationsのルールに反しているか否かで
9
9
  対応を分けるのが普通かと思います。
10
10
 
11
- DataAnnotationsに対して、DBに登録できるか否かは別問題と考えた方が良いと思います。
11
+ DataAnnotationsに対して、DBに登録できるか否かは別問題と考えた方が良いと思います。
12
+
13
+ -- 追記 ----
14
+ ajaxでやっているんですね、ですと
15
+ ```
16
+ @Html.ValidationSummary(true)
17
+ ```
18
+ は使えなさそうですね。
19
+
20
+ 未入力項目が"null"の場合
21
+ ```
22
+ if (result.Success == "1") {
23
+ window.location.href = "/QuotationMains/index";
24
+ }else {
25
+ alert(result.ex);
26
+ }
27
+ ```
28
+
29
+ ```
30
+ if (ModelState.IsValid)
31
+ ```
32
+ はどういう結果でしょうか。