// Only render attributes if unobtrusive client-side validation is enabled, and then only if we've // never rendered validation for a field with this name in this form. Also, if there's no form context, // then we can't render the attributes (we'd have no <form> to attach them to). public IDictionary <string, object> GetUnobtrusiveValidationAttributes(string name, ModelMetadata metadata) { Dictionary <string, object> results = new Dictionary <string, object>(); // The ordering of these 3 checks (and the early exits) is for performance reasons. if (!ViewContext.UnobtrusiveJavaScriptEnabled) { return(results); } FormContext formContext = ViewContext.GetFormContextForClientValidation(); if (formContext == null) { return(results); } string fullName = ViewData.TemplateInfo.GetFullHtmlFieldName(name); if (formContext.RenderedField(fullName)) { return(results); } formContext.RenderedField(fullName, true); IEnumerable <ModelClientValidationRule> clientRules = ClientValidationRuleFactory(name, metadata); UnobtrusiveValidationAttributesGenerator.GetValidationAttributes(clientRules, results); return(results); }
public static HtmlString GenerateHtmlAttributes(this IEnumerable <ModelClientValidationRule> clientRules) { if (!clientRules.Any <ModelClientValidationRule>()) { return(null); } Dictionary <string, object> results = new Dictionary <string, object>(StringComparer.OrdinalIgnoreCase); UnobtrusiveValidationAttributesGenerator.GetValidationAttributes(clientRules, results); StringBuilder builder = new StringBuilder(); foreach (KeyValuePair <string, object> pair in results) { string key = pair.Key; string str2 = HttpUtility.HtmlEncode(Convert.ToString(pair.Value, CultureInfo.InvariantCulture)); builder.Append(key).Append("=\"").Append(str2).Append('"').Append(' '); } if (builder.Length > 0) { builder.Length--; } return(new HtmlString(builder.ToString())); }