コード例 #1
0
        public override void Process(TagHelperContext context, TagHelperOutput output)
        {
            Guard.ArgumentNotNull(context, nameof(context));
            Guard.ArgumentNotNull(output, nameof(output));

            string fullName  = NameAndIdProvider.GetFullHtmlFieldName(ViewContext, For.Name);
            string elementId = NameAndIdProvider.CreateSanitizedId(ViewContext, fullName, TagHelperConstants.ValidationAnchorSeparator);

            if (string.IsNullOrWhiteSpace(elementId))
            {
                throw new InvalidOperationException("Unable to determine form ID string");
            }

            output.Attributes.Add("name", $"{TagHelperConstants.ValidationAnchorPrefix}-{elementId}");
            output.Attributes.Add("class", "form-anchor");
        }
コード例 #2
0
        public virtual TagBuilder GenerateSelect(
            ViewContext viewContext,
            ModelExplorer modelExplorer,
            string optionLabel,
            string expression,
            IEnumerable <GdsSelectListItem> selectList,
            ICollection <string> currentValues,
            bool allowMultiple,
            object htmlAttributes)
        {
            if (viewContext == null)
            {
                throw new ArgumentNullException(nameof(viewContext));
            }

            var fullName = NameAndIdProvider.GetFullHtmlFieldName(viewContext, expression);
            var htmlAttributeDictionary = GetHtmlAttributeDictionaryOrNull(htmlAttributes);

            if (!IsFullNameValid(fullName, htmlAttributeDictionary))
            {
                throw new ArgumentNullException("FormatHtmlGenerator_FieldNameCannotBeNullOrEmpty", nameof(expression));
                ////throw new ArgumentException(
                ////    Resources.FormatHtmlGenerator_FieldNameCannotBeNullOrEmpty(
                ////        typeof(IHtmlHelper).FullName,
                ////        nameof(IHtmlHelper.Editor),
                ////        typeof(IHtmlHelper<>).FullName,
                ////        nameof(IHtmlHelper<object>.EditorFor),
                ////        "htmlFieldName"),
                ////    nameof(expression));
            }

            // If we got a null selectList, try to use ViewData to get the list of items.
            if (selectList == null)
            {
                selectList = GetSelectListItems(viewContext, expression);
            }

            modelExplorer = modelExplorer ??
                            ExpressionMetadataProvider.FromStringExpression(expression, viewContext.ViewData, _metadataProvider);

            // Convert each ListItem to an <option> tag and wrap them with <optgroup> if requested.
            var listItemBuilder = GenerateGroupsAndOptions(optionLabel, selectList, currentValues);

            var tagBuilder = new TagBuilder("select");

            tagBuilder.InnerHtml.SetHtmlContent(listItemBuilder);
            tagBuilder.MergeAttributes(htmlAttributeDictionary);
            NameAndIdProvider.GenerateId(viewContext, tagBuilder, fullName, IdAttributeDotReplacement);
            if (!string.IsNullOrEmpty(fullName))
            {
                tagBuilder.MergeAttribute("name", fullName, replaceExisting: true);
            }

            if (allowMultiple)
            {
                tagBuilder.MergeAttribute("multiple", "multiple");
            }

            // If there are any errors for a named field, we add the css attribute.
            if (viewContext.ViewData.ModelState.TryGetValue(fullName, out var entry))
            {
                if (entry.Errors.Count > 0)
                {
                    tagBuilder.AddCssClass(HtmlHelper.ValidationInputCssClassName);
                }
            }

            AddValidationAttributes(viewContext, tagBuilder, modelExplorer, expression);

            return(tagBuilder);
        }