private void AppendInitializeSelectEnumFunction(StringBuilder sb, SelectDropdownContext selectDropdownContext, string functionName, string className) { Contract.Requires(sb != null && selectDropdownContext != null); string dataString = null; if (selectDropdownContext.OptionDataSet != null) { var elements = selectDropdownContext.OptionDataSet.Select(x => $"{{id:'{x.Value}', text:'{x.Text}'}}").ToArray(); dataString = string.Join(",", elements); } sb.AppendLine("function " + functionName + "(){"); sb.AppendLine("var select = $(\"." + className + "\").select2({"); sb.AppendLine("data: [" + dataString + "]"); sb.AppendLine("});"); sb.AppendLine("}"); }
public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) { if (context == null || output == null) { throw new ArgumentNullException(); } Contract.EndContractBlock(); var selectDropdownContext = new SelectDropdownContext(); context.Items.Add(typeof(SelectDropdownTagHelper), selectDropdownContext); await output.GetChildContentAsync(); var modelExpression = SelectedValueProperty ?? SelectedIdProperty; var key = modelExpression.Name.ToLower(); var className = $"select2-dropdown-{key}"; var currentValues = _generator.GetCurrentValues(ViewContext, modelExpression.ModelExplorer, modelExpression.Name, false); var selectBuilder = _generator.GenerateSelect(ViewContext, modelExpression.ModelExplorer, null, modelExpression.Name, Enumerable.Empty <SelectListItem>(), currentValues, false, null); if (selectBuilder != null) { var classes = className; if (context.AllAttributes.TryGetAttribute("class", out var classTag)) { classes = $"{classes} {classTag.Value}"; } if (selectBuilder.Attributes.ContainsKey("class")) { selectBuilder.Attributes["class"] = $"{selectBuilder.Attributes["class"]} {classes}"; } else { selectBuilder.Attributes.Add("class", classes); } output.Content.AppendHtml(selectBuilder); } output.Content.AppendLine(); output.TagName = ""; var sb = new StringBuilder(); AppendLocalizationScript(sb); var initializeFunctionName = "initializeFunction"; sb.AppendLine("<script type=\"text/javascript\">"); if (SelectedValueProperty != null) { if (OptionDataSet != null) { AppendInitializeSelectDataSetFunction(sb, OptionDataSet, initializeFunctionName, className); } else if (selectDropdownContext.OptionDataSet != null) { AppendInitializeSelectDataSetFunction(sb, selectDropdownContext.OptionDataSet, initializeFunctionName, className); } } else if (SelectedIdProperty != null) { AppendInitializeSelectAjaxFunction(sb, initializeFunctionName, className); } else { throw new NotImplementedException(); } sb.AppendLine(initializeFunctionName + "();"); sb.AppendLine("</script>"); output.Content.AppendHtml(sb.ToString()); }