1
+ // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved.
2
+ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
3
+
4
+ using Microsoft . AspNet . Mvc . Rendering ;
5
+ using Microsoft . AspNet . Razor . Runtime . TagHelpers ;
6
+ using Microsoft . AspNet . Razor . TagHelpers ;
7
+
8
+ namespace Microsoft . AspNet . Mvc . TagHelpers
9
+ {
10
+ /// <summary>
11
+ /// <see cref="ITagHelper"/> implementation targeting <div> elements with <c>validation-summary</c> or
12
+ /// <c>validation-model-errors-only</c> attributes.
13
+ /// </summary>S
14
+ [ TagName ( "div" ) ]
15
+ [ ContentBehavior ( ContentBehavior . Append ) ]
16
+ public class ValidationSummaryTagHelper : TagHelper
17
+ {
18
+ private static readonly bool DefaultModelErrorsOnlyBehavior = false ;
19
+
20
+ [ Activate ]
21
+ private ViewContext ViewContext { get ; set ; }
22
+
23
+ [ Activate ]
24
+ private IHtmlGenerator Generator { get ; set ; }
25
+
26
+ /// <summary>
27
+ /// If <c>true</c> appends a validation summary.
28
+ /// </summary>
29
+ /// <remarks>If <see cref="ValidationModelErrorsOnly"/> is provided this is assumed <c>true</c> unless
30
+ /// specified <c>false</c>.</remarks>
31
+ [ HtmlAttributeName ( "validation-summary" ) ]
32
+ public bool ? ValidationSummary { get ; set ; }
33
+
34
+ /// <summary>
35
+ /// If <c>true</c>, display model-level errors only; otherwise display all errors. Defaults behavior is
36
+ /// <c>false</c>.
37
+ /// </summary>
38
+ /// <remarks>
39
+ /// If provided <see cref="ValidationSummary"/> is assumed <c>true</c> unless specified <c>false</c>.
40
+ /// </remarks>
41
+ [ HtmlAttributeName ( "validation-model-errors-only" ) ]
42
+ public bool ? ValidationModelErrorsOnly { get ; set ; }
43
+
44
+ /// <inheritdoc />
45
+ public override void Process ( TagHelperContext context , TagHelperOutput output )
46
+ {
47
+ // If the user specified validation-summary, use the provided value. If validation-summary was not
48
+ // specified and validation-model-errors-only was, assume they want a validation summary.
49
+ var generateValidationSummary = ( ValidationSummary . HasValue && ValidationSummary . Value ) ||
50
+ ( ! ValidationSummary . HasValue && ValidationModelErrorsOnly . HasValue ) ;
51
+
52
+ if ( generateValidationSummary )
53
+ {
54
+ // If the user specified their validation-model-errors-only behavior, use it; otherwise revert to
55
+ // the default behavior (false).
56
+ var validationModelErrorsOnly = ValidationModelErrorsOnly . HasValue ?
57
+ ValidationModelErrorsOnly . Value :
58
+ DefaultModelErrorsOnlyBehavior ;
59
+
60
+ var tagBuilder = Generator . GenerateValidationSummary (
61
+ ViewContext ,
62
+ validationModelErrorsOnly ,
63
+ // We don't have access to the users message, it's implied by the content of the <div> tag.
64
+ message : string . Empty ,
65
+ headerTag : output . TagName ,
66
+ htmlAttributes : null ) ;
67
+
68
+ output . Merge ( tagBuilder ) ;
69
+ }
70
+ }
71
+ }
72
+ }
0 commit comments