Refining an ASP.Net MVC VeiwModel for a Table to display worked hours
I don't think there is anything necessarilly wrong with your approach especially if it works.  However I personal might consider trying to leverage the DayOfWeek enumeration of c# and avoid the individual day timesheets.  

This way you could loop over weeks more easily as well as potentially leverage Linq to do things such as calculating the TotalHours as part of the viewModel.

My viewModel for this case might then look like this:

public class TimesheetWeeklyTableVM
{
    public int TimesheetHeaderID { get; set; }
    public DateTime WeekEndingDate { get; set; }
    public decimal TotalWeekHours { get; set; }

    public List&lt;TimesheetDailyVM&gt; DaysOfWeek { get; set; }

    public TimesheetWeeklyTableVM()
    {
        DaysOfWeek = new List&lt;TimesheetDailyVM&gt;();

        foreach (DayOfWeek dayOfWeek in Enum.GetValues(typeof(DayOfWeek)))
        {
            DaysOfWeek.Add(new TimesheetDailyVM()
            {
                DayOfWeek = dayOfWeek
            });
        }
    }
}

public class TimesheetDailyVM
{
    public DayOfWeek DayOfWeek { get; set; }

    public double TotalHours
    {
        get { return TimeSpan.FromSeconds(Tasks.Sum(p =&gt; (p.StartDateTime - p.EndDateTime).TotalSeconds)).TotalHours; }
    }

    public IEnumerable&lt;TimesheetDailyHoursVM&gt; Tasks { get; set; }

    public TimesheetDailyVM()
    {
        Tasks = new List&lt;TimesheetDailyHoursVM&gt;();
    }
}

public class TimesheetDailyHoursVM
{
    public int TimesheetID { get; set; }

    public DateTime StartDateTime { get; set; }
    public DateTime EndDateTime { get; set; }
    public string ProjectCode { get; set; }
    public string TaskCode { get; set; }
    public string ProjectDescription { get; set; }
    public string TaskDescription { get; set; }
}


Note, I'm not sure if TotalHours is calculated differently but if it's just a sum of the Task times then you could include that logic into the Viewmodel itself as in.

public double TotalHours
{
    get { return TimeSpan.FromSeconds(Tasks.Sum(p =&gt; (p.StartDateTime - p.EndDateTime).TotalSeconds)).TotalHours; }
}


If you wanted to add properties for each individual day to make it easier to access say for example Monday then you could easily do this such as.

public TimesheetDailyVM Monday { get { return Day(DayOfWeek.Monday); }
public TimesheetDailyVM Tuesday { get { return Day(DayOfWeek.Tuesday); }

private TimesheetDailyVM Day(DayOfWeek day) 
{
    return Days.Single(p =&gt; p.DayOfWeek == day);
}