Optgroup drop-down support in MVC - Problems with Model Binding

后端 未结 3 1314
悲哀的现实
悲哀的现实 2021-02-08 03:58

I wonder if anyone can shed some light on this problem..

I\'ve got an option group drop-down for selecting a person\'s ethnicity – however it’s not storing the value in

3条回答
  •  刺人心
    刺人心 (楼主)
    2021-02-08 04:44

    Just changed the helper class to get it work for MVC 3 and with nullable int. Thanks a lot for the class, saves me plenty of time.

    public static class GroupDropListExtensions
    {
        public static MvcHtmlString GroupDropList(this HtmlHelper helper, string name, IEnumerable data, int? SelectedValue, object htmlAttributes)
        {
            if (data == null && helper.ViewData != null)
                data = helper.ViewData.Eval(name) as IEnumerable;
            if (data == null) return new MvcHtmlString(string.Empty);
    
            var select = new TagBuilder("select");
    
            if (htmlAttributes != null)
                select.MergeAttributes(new RouteValueDictionary(htmlAttributes));
    
            select.GenerateId(name);
            select.MergeAttribute("name", name);
    
            var optgroupHtml = new StringBuilder();
            var groups = data.ToList();
            foreach (var group in data)
            {
                var groupTag = new TagBuilder("optgroup");
                groupTag.Attributes.Add("label", helper.Encode(group.Name));
                var optHtml = new StringBuilder();
                foreach (var item in group.Items)
                {
                    var option = new TagBuilder("option");
                    option.Attributes.Add("value", helper.Encode(item.Value));
                    if (SelectedValue != 0 && item.Value == SelectedValue)
                        option.Attributes.Add("selected", "selected");
                    option.InnerHtml = helper.Encode(item.Text);
                    optHtml.AppendLine(option.ToString(TagRenderMode.Normal));
                }
                groupTag.InnerHtml = optHtml.ToString();
                optgroupHtml.AppendLine(groupTag.ToString(TagRenderMode.Normal));
            }
            select.InnerHtml = optgroupHtml.ToString();
            return new MvcHtmlString(select.ToString(TagRenderMode.Normal));
        }
    }
    
    public class GroupDropListItem
    {
        public string Name { get; set; }
        public List Items { get; set; }
    }
    
    public class OptionItem
    {
        public string Text { get; set; }
        public int Value { get; set; }
    }
    

提交回复
热议问题