/ / exibir um ano civil com hiperlinks personalizados em asp.net mvc - asp.net-mvc

exibir um ano civil com hiperlinks personalizados em asp.net mvc - asp.net-mvc

Eu estou olhando para criar uma página web MVC queexibe os 12 meses do ano em formato de calendário. Dentro de cada dia do mês eu vou negrito apenas as datas que têm alguma atividade (dados do banco de dados). As datas com atividade também seriam vinculadas a uma rota como / Activity / 2008/12/25

Estou prestes a tentar experimentar o controle do calendário do kit de ferramentas do asp.net ajax, mas queria saber se alguém tinha algum conselho.

Respostas:

6 para resposta № 1

Renderizar um calendário não é extremamente complicado. Usando DateTimeFormatInfo em System.Globalization e o DateTime, todas as informações necessárias podem ser recuperadas:

  • DateTimeFormatInfo.CurrentInfo.FirstDayOfWeek
  • DateTimeFormatInfo.CurrentInfo.GetMonthName (mês)
  • DateTimeFormatInfo.CurrentInfo.GetAbbreviatedDayName ((DayOfWeek) dayNumber)

Um mês no calendário pode ser renderizado em uma tabela:

_ _ _ 1 2 3 4
5 6 7 8 9 ...

Para determinar o número de células vazias no início, algo assim pode ser usado:

DateTime date = new DateTime(year, month, 1);
int emptyCells = ((int)date.DayOfWeek + 7
- (int)DateTimeFormatInfo.CurrentInfo.FirstDayOfWeek) % 7;

Como existem no máximo 31 dias em um mês eno máximo 6 células vazias no início, um mês pode ser processado no máximo Ceil (37/7) = 6 linhas. Portanto, há no máximo 42 células para processar em um mês, algumas delas estarão vazias.

Uma nova linha é inserida na tabela a cada 7 (número de dias em uma semana) células.

int days = DateTime.DaysInMonth(year, month);
for (int i = 0; i != 42; i++)
{
if (i % 7 == 0) {
writer.WriteLine("<tr>");
if( i > 0 ) writer.WriteLine("</tr>");
}

if (i < emptyCells || i >= emptyCells + days) {
writer.WriteLine("<td class="cal-empty">&nbsp;</td>");
} else {
writer.WriteLine("<td class="cal-day"">" + date.Day + "</td>");
date = date.AddDays(1);
}
}

Além disso, basta adicionar um link adicional nas células não vazias à rota desejada quando as datas estiverem com atividade.