public override IEnumerable <ModelClientValidationRule> GetClientValidationRules()
        {
            IClientValidatable clientValidatable = Attribute as IClientValidatable;

            if (clientValidatable != null)
            {
                return(clientValidatable.GetClientValidationRules(Metadata, ControllerContext));
            }

            return(base.GetClientValidationRules());
        }
        public override IEnumerable<ModelClientValidationRule> GetClientValidationRules()
        {
            IEnumerable<ModelClientValidationRule> results = base.GetClientValidationRules();

            IClientValidatable clientValidatable = Attribute as IClientValidatable;
            if (clientValidatable != null)
            {
                results = results.Concat(clientValidatable.GetClientValidationRules(Metadata, ControllerContext));
            }

            return results;
        }
Example #3
0
        /// <summary>
        /// When implemented in a derived class, returns metadata for client validation.
        /// </summary>
        /// <returns>
        /// The metadata for client validation.
        /// </returns>
        public override IEnumerable <ModelClientValidationRule> GetClientValidationRules()
        {
            // ReSharper disable once SuspiciousTypeConversion.Global
            IClientValidatable supportsClientValidation = m_Validator as IClientValidatable;

            if (supportsClientValidation != null)
            {
                return(supportsClientValidation.GetClientValidationRules(Metadata, ControllerContext));
            }

            return(Enumerable.Empty <ModelClientValidationRule>());
        }
        /// <summary> Returns the HTML ID of the specified view model property. </summary>
        /// <remarks> Based on: http://stackoverflow.com/a/21018963/1637105 </remarks>
        /// <param name="metadata"> The model metadata. </param>
        /// <param name="viewContext"> The view context. </param>
        /// <param name="propertyName"> The name of the view model property whose HTML ID is to be returned. </param>
        public static string GetHtmlId(this IClientValidatable me,
                                       ModelMetadata metadata, ControllerContext context,
                                       string propertyName)
        {
            var viewContext = context as ViewContext;

            if (viewContext == null || viewContext.ViewData.TemplateInfo.HtmlFieldPrefix == string.Empty)
            {
                return(propertyName);
            }
            else
            {
                // This is tricky.  The "Field ID" returned by GetFullHtmlFieldId is the HTML ID
                // attribute created by the MVC view engine for the property whose validator is
                // being set up by the caller of this routine. This code removes the property
                // name from the Field ID, then inserts the specified property name.
                // Of course, this only works for elements on the same page as the caller of
                // this routine!
                string fieldId = viewContext.ViewData.TemplateInfo.GetFullHtmlFieldId("");
                fieldId = fieldId.Remove(fieldId.LastIndexOf("_"));
                return(fieldId + "_" + propertyName);
            }
        }