MVC5 Редактируемый элемент DropdownList - PullRequest
0 голосов
/ 01 июля 2019

В настоящее время у меня есть выпадающий список, извлекающий значения из таблицы SQL Server.Я хочу, чтобы пользователь мог извлекать значения и / или иметь возможность добавлять или редактировать выбранные значения.Я надеялся получить редактируемый выпадающий список, так как считаю, что это будет лучшим вариантом для этого.Я создал элемент управления выпадающего списка, но в настоящее время он точно такой же, как мой обычный список выпадающего списка.Я искал в Интернете, но не нашел ни одного.Я думал, может быть, элемент управления Razor HTML Helper?Что каждый1 считает наилучшим для этого?(В крайнем случае я мог бы использовать Ajax), но мне бы очень хотелось, чтобы выпадающий список редактировался, если бы я мог заставить это работать.

// HERE IS MY CURRENT DDL
@Html.DropDownListFor(x => x.Description, (IEnumerable<SelectListItem>) ViewBag.DescriptionDDL,"", new { @class = "form-control" })
@Html.ValidationMessageFor(x => x.Description, "",new { @class = "text-danger" })

// Here is my dropdown control I built that is just a normal dropdown so far /* Custom Editable DropDownList Control */
        public static MvcHtmlString CustomDropDown<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, 
            List<string> names, object htmlAttributes)
        {
            var fieldName = ExpressionHelper.GetExpressionText(expression);
            var fullbindingName = html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(fieldName);
            var fieldId = TagBuilder.CreateSanitizedId(fullbindingName);
            var metaData = ModelMetadata.FromLambdaExpression(expression, html.ViewData);
            var value = metaData.Model;

            TagBuilder tagBuilder = new TagBuilder("select");
            tagBuilder.Attributes.Add("name", fullbindingName);
            tagBuilder.Attributes.Add("id", fieldId);

            StringBuilder options = new StringBuilder();
            options.AppendLine("<option value='0' > Select </option>");
            for(int i=0; i<names.Count; i++)
            {
                string singleOption = "<option value = '" + names[i].ToString() + "'>" + names[i].ToString() + "</options>";
                options.AppendLine(singleOption);
            }
            tagBuilder.InnerHtml = options.ToString();

            foreach(PropertyDescriptor prop in TypeDescriptor.GetProperties(htmlAttributes))
            {
                tagBuilder.MergeAttribute(prop.Name.Replace('_', '-'), prop.GetValue(htmlAttributes).ToString(), true);
            }
            return new MvcHtmlString(tagBuilder.ToString());
        }
...