2015-10-13 54 views
0

我正在使用Intranet网站,特别是针对员工的每周监控工具。我需要的是填补了DropDownList与周,每周例如:包含星期的DropDownList

Week : From 12/10/15 to 18/10/15 

我能够到另一个页面上,但与年和月进行过滤:

CalendarController c = new CalendarController(); 
ViewBag.ListYears = c.ListYears(iyear); 
ViewBag.ListMonths = c.ListMonths(imonth); 
ViewBag.ListDaysOfMonth = _service.ListDaysOfMonth(iyear.ToString(), imonth.ToString()); 

而且使用的形式进行保存。

如何在我的DDList中填入2015年所有星期的列表?

回答

0

这里是你如何获得本年度的一周(kudos goes here):

var jan1 = new DateTime(DateTime.Today.Year , 1, 1); 
//beware different cultures, see other answers 
var startOfFirstWeek = jan1.AddDays(1 - (int)(jan1.DayOfWeek)); 
var weeks= 
    Enumerable 
     .Range(0,54) 
     .Select(i => new { 
      weekStart = startOfFirstWeek.AddDays(i * 7) 
     }) 
     .TakeWhile(x => x.weekStart.Year <= jan1.Year) 
     .Select(x => new { 
      x.weekStart, 
      weekFinish=x.weekStart.AddDays(4) 
     }) 
     .SkipWhile(x => x.weekFinish < jan1.AddDays(1)) 
     .Select((x,i) => new { 
      x.weekStart, 
      x.weekFinish, 
      weekNum=i+1 
     }); 

然后添加周的下拉列表

1

要返回格式化周的列表,你可以使用下面的方法

public List<string> FetchWeeks(int year) 
{ 
    List<string> weeks = new List<string>(); 
    DateTime startDate = new DateTime(year, 1, 1); 
    startDate = startDate.AddDays(1 - (int)startDate.DayOfWeek); 
    DateTime endDate = startDate.AddDays(6); 
    while (startDate.Year < 1 + year) 
    { 
     weeks.Add(string.Format("Week: From {0:dd/MM/yyyy}to {1:dd/MM/yyyy}", startDate, endDate)); 
     startDate= startDate.AddDays(7); 
     endDate = endDate.AddDays(7); 
    } 
    return weeks; 
} 

,然后在控制器

var weeks = FetchWeeks(2105); 
ViewBag.Weeks = new SelectList(weeks); 

但是,这将回发格式化的值,这在控制器中可能没有多大用处,因此可以修改此值,以便您创建IEnumerable<SelectListItem>,其中Value属性是表示年份中的星期索引的数字而Text属性是格式化的文本。