// 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()));
        }