Skip to content

Instantly share code, notes, and snippets.

@mahizsas
Forked from frankgeerlings/gist:2635991
Created October 10, 2013 17:28
Show Gist options
  • Save mahizsas/6922277 to your computer and use it in GitHub Desktop.
Save mahizsas/6922277 to your computer and use it in GitHub Desktop.
public static class HtmlExtensions
{
public static IHtmlString DropDownListFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, Dictionary<string, IEnumerable<SelectListItem>> selectList)
{
/*
* <select name="tmodel">
* <optgroup title="Items">
* <option value="item">Item</option>
* </select>
*/
var select = new TagBuilder("select");
select.Attributes.Add("name", ExpressionHelper.GetExpressionText(expression));
var optgroups = new StringBuilder();
foreach (var kvp in selectList)
{
var optgroup = new TagBuilder("optgroup");
optgroup.Attributes.Add("label", kvp.Key);
var options = new StringBuilder();
foreach (var item in kvp.Value)
{
var option = new TagBuilder("option");
option.Attributes.Add("value", item.Value);
option.SetInnerText(item.Text);
if (item.Selected)
{
option.Attributes.Add("selected", "selected");
}
options.Append(option.ToString(TagRenderMode.Normal));
}
optgroup.InnerHtml = options.ToString();
optgroups.Append(optgroup.ToString(TagRenderMode.Normal));
}
select.InnerHtml = optgroups.ToString();
return MvcHtmlString.Create(select.ToString(TagRenderMode.Normal));
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment