回答編集履歴
4
追記3
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
書式の修正
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
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
コメントをうけ追記
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
|
+
はどういう結果でしょうか。
|