Hi Everybody,
I have this:
[code]
public static class GroupDropListExtensions
{
public static MvcHtmlString GroupDropList(this HtmlHelper helper, string name, IEnumerable<GroupDropListItem> data, int? SelectedValue, object htmlAttributes)
{
if (data == null && helper.ViewData != null)
data = helper.ViewData.Eval(name) as IEnumerable<GroupDropListItem>;
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 static object GroupDropList(this HtmlHelper helper, string weekid, IEnumerable<GroupDropListItem> getWeekNumbers, object selectedValue)
{
}
*/
}
public class GroupDropListItem
{
public string Name { get; set; }
public List<OptionItem> Items { get; set; }
}
public class OptionItem
{
public string Text { get; set; }
public int Value { get; set; }
}
[/code]
and the extension method that will use the class:
[code]
public static IEnumerable<GroupDropListItem> GetWeekNumbers(this HtmlHelper helper /*Dictionary<int, DateTime> dayOfWeek*/ /*,DateTime allWeeks*/ /*int selectID*/)
{
var janFirst = new DateTime(DateTime.Today.Year, 1, 1);
//beware different cultures.
var firstWeek = janFirst.AddDays(1 - (int)(janFirst.DayOfWeek));
int j = -1;
foreach (var x1 in Enumerable.Range(0, 52).Select(i => new
{
weekStart = firstWeek.AddDays(i * 7),
Tuesday = firstWeek.AddDays(i * 3)
}).TakeWhile(x => x.weekStart.Year <= janFirst.Year).Select(x => new
{
x.weekStart,
tuesday = x.weekStart.AddDays(3),
weekFinish = x.weekStart.AddDays(6)
}).SkipWhile(x => x.weekFinish < janFirst.AddDays(1)))
{
j++;
yield return new GroupDropListItem(
{
List<GroupDropListItem> = new
{
Maandag = firstWeek.AddDays(j*7).ToShortDateString(),
//.OrderBy(item => item.ToString(CultureInfo.InvariantCulture)),
Dindsdag = x1.weekStart.AddDays(1).ToShortDateString(),
Wendsday = x1.weekStart.AddDays(2).ToShortDateString(),
Thursday = x1.weekStart.AddDays(3).ToShortDateString(),
Fryday = x1.weekStart.AddDays(4).ToShortDateString(),
Saterday = x1.weekStart.AddDays(5).ToShortDateString(),
Sunday = x1.weekStart.AddDays(6).ToShortDateString(),
//vrijdag = x1.weekStart.AddDays(6).ToShortDateString(),
//weekNum = j + 1
}.ToString(),
Name = (j + 1).ToString(CultureInfo.InvariantCulture);//.ToString(CultureInfo.InvariantCulture))
});
}
//return helper.DropDownList()
}//end method
[/code]
and for the view:
[code]
<div class="editor-field">
@Html.GroupDropList("weekId", (IEnumerable<GroupDropListItem>) Html.GetWeekNumbers(), new {onchange = "Selectedchange();"})
@Html.ValidationMessageFor(model => model != null && model.Week != null ? model.Week.WeekNumber : null)
</div>
[/code]
But how to get the helper class: GroupDropListExtensions
integrated in the othter helper method:
GetWeekNumbers.
THX for helping