回答編集履歴

3

誤字の修正

2017/06/15 23:49

投稿

workaholist
workaholist

スコア559

test CHANGED
@@ -58,7 +58,7 @@
58
58
 
59
59
  {
60
60
 
61
- yield return new ValidationResult("Bは入力が必須です。", new string[] { "C" });
61
+ yield return new ValidationResult("Bは入力が必須です。", new string[] { "B" });
62
62
 
63
63
  }
64
64
 
@@ -66,7 +66,7 @@
66
66
 
67
67
  {
68
68
 
69
- yield return new ValidationResult("Cは入力が必須です。", new string[] { "B" });
69
+ yield return new ValidationResult("Cは入力が必須です。", new string[] { "C" });
70
70
 
71
71
  }
72
72
 

2

質問者の追記を拝見し修正

2017/06/15 23:49

投稿

workaholist
workaholist

スコア559

test CHANGED
@@ -3,6 +3,16 @@
3
3
  つまりアノテーション1行では表現できないはずです。
4
4
 
5
5
  従って、モデルにIValidatableObjectインターフェイスを実装してValidateメソッドで行うのが普通ではないでしょうか。
6
+
7
+
8
+
9
+ 質問者様の追記を見て下記仕様と想定し、ソースコードを記載します。
10
+
11
+ - FLGのチェックボックスがONのときのみテキストボックスA、B、Cの必須チェックを行う
12
+
13
+ - チェックボックスがOFFの時はABCは非活性
14
+
15
+ - Dだけは常に必須チェックを行う
6
16
 
7
17
 
8
18
 
@@ -21,6 +31,8 @@
21
31
  public string B { get; set; }
22
32
 
23
33
  public string C { get; set; }
34
+
35
+ [Required]
24
36
 
25
37
  public string D { get; set; }
26
38
 
@@ -58,14 +70,6 @@
58
70
 
59
71
  }
60
72
 
61
- if (string.IsNullOrEmpty(this.D))
62
-
63
- {
64
-
65
- yield return new ValidationResult("Dは入力が必須です。", new string[] { "D" });
66
-
67
- }
68
-
69
73
  }
70
74
 
71
75
  }

1

ソースコードの追記

2017/06/15 10:36

投稿

workaholist
workaholist

スコア559

test CHANGED
@@ -3,3 +3,73 @@
3
3
  つまりアノテーション1行では表現できないはずです。
4
4
 
5
5
  従って、モデルにIValidatableObjectインターフェイスを実装してValidateメソッドで行うのが普通ではないでしょうか。
6
+
7
+
8
+
9
+ ```C#
10
+
11
+ [Serializable]
12
+
13
+ public class TestModel : IValidatableObject
14
+
15
+ {
16
+
17
+ public string Flg { get; set; }
18
+
19
+ public string A { get; set; }
20
+
21
+ public string B { get; set; }
22
+
23
+ public string C { get; set; }
24
+
25
+ public string D { get; set; }
26
+
27
+
28
+
29
+ public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
30
+
31
+ {
32
+
33
+ if (this.Flg == "1")
34
+
35
+ {
36
+
37
+ if (string.IsNullOrEmpty(this.A))
38
+
39
+ {
40
+
41
+ yield return new ValidationResult("Aは入力が必須です。", new string[] { "A" });
42
+
43
+ }
44
+
45
+ if (string.IsNullOrEmpty(this.B))
46
+
47
+ {
48
+
49
+ yield return new ValidationResult("Bは入力が必須です。", new string[] { "C" });
50
+
51
+ }
52
+
53
+ if (string.IsNullOrEmpty(this.C))
54
+
55
+ {
56
+
57
+ yield return new ValidationResult("Cは入力が必須です。", new string[] { "B" });
58
+
59
+ }
60
+
61
+ if (string.IsNullOrEmpty(this.D))
62
+
63
+ {
64
+
65
+ yield return new ValidationResult("Dは入力が必須です。", new string[] { "D" });
66
+
67
+ }
68
+
69
+ }
70
+
71
+ }
72
+
73
+ }
74
+
75
+ ```