| File: ValidationHtmlAttributeProvider.cs | Web Access |
| Project: src\aspnetcore\src\Mvc\Mvc.ViewFeatures\src\Microsoft.AspNetCore.Mvc.ViewFeatures.csproj (Microsoft.AspNetCore.Mvc.ViewFeatures) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using Microsoft.AspNetCore.Mvc.Rendering; namespace Microsoft.AspNetCore.Mvc.ViewFeatures; /// <summary> /// Contract for a service providing validation attributes for expressions. /// </summary> public abstract class ValidationHtmlAttributeProvider { /// <summary> /// Adds validation-related HTML attributes to the <paramref name="attributes" /> if client validation is /// enabled. /// </summary> /// <param name="viewContext">A <see cref="ViewContext"/> instance for the current scope.</param> /// <param name="modelExplorer">The <see cref="ModelExplorer"/> for an expression.</param> /// <param name="attributes"> /// The <see cref="Dictionary{TKey, TValue}"/> to receive the validation attributes. Maps the validation /// attribute names to their <see cref="string"/> values. Values must be HTML encoded before they are written /// to an HTML document or response. /// </param> /// <remarks> /// Adds nothing to <paramref name="attributes"/> if client-side validation is disabled. /// </remarks> public abstract void AddValidationAttributes( ViewContext viewContext, ModelExplorer modelExplorer, IDictionary<string, string> attributes); /// <summary> /// Adds validation-related HTML attributes to the <paramref name="attributes" /> if client validation is /// enabled and validation attributes have not yet been added for this <paramref name="expression"/> in the /// current <form>. /// </summary> /// <param name="viewContext">A <see cref="ViewContext"/> instance for the current scope.</param> /// <param name="modelExplorer">The <see cref="ModelExplorer"/> for the <paramref name="expression"/>.</param> /// <param name="expression">Expression name, relative to the current model.</param> /// <param name="attributes"> /// The <see cref="Dictionary{TKey, TValue}"/> to receive the validation attributes. Maps the validation /// attribute names to their <see cref="string"/> values. Values must be HTML encoded before they are written /// to an HTML document or response. /// </param> /// <remarks> /// Tracks the <paramref name="expression"/> in the current <see cref="FormContext"/> to avoid generating /// duplicate validation attributes. That is, validation attributes are added only if no previous call has /// added them for a field with this name in the <form>. /// </remarks> public virtual void AddAndTrackValidationAttributes( ViewContext viewContext, ModelExplorer modelExplorer, string expression, IDictionary<string, string> attributes) { ArgumentNullException.ThrowIfNull(viewContext); ArgumentNullException.ThrowIfNull(modelExplorer); ArgumentNullException.ThrowIfNull(attributes); // Don't track fields when client-side validation is disabled. var formContext = viewContext.ClientValidationEnabled ? viewContext.FormContext : null; if (formContext == null) { return; } var fullName = viewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(expression); if (formContext.RenderedField(fullName)) { return; } formContext.RenderedField(fullName, true); AddValidationAttributes(viewContext, modelExplorer, attributes); } }