/ / wyświetla rok kalendarzowy z niestandardowymi hiperlinkami w asp.net mvc - asp.net-mvc

wyświetlić rok kalendarzowy z niestandardowymi hiperlinkami w asp.net mvc - asp.net-mvc

Szukam, aby utworzyć stronę internetową MVC, którawyświetla 12 miesięcy roku w formacie kalendarza. Wewnątrz każdego dnia miesiąca pogrubię tylko daty, które mają jakąkolwiek aktywność (dane z bazy danych). Daty z aktywnością będą również hiperłącze do trasy takiej jak / Activity / 2008/12/25

Mam zamiar spróbować wypróbować kontrolę kalendarza toolkitu kontroli asp.net ajax, ale zastanawiałem się, czy ktoś jeszcze miał jakąkolwiek radę.

Odpowiedzi:

6 dla odpowiedzi № 1

Renderowanie kalendarza nie jest bardzo skomplikowane. Używając DateTimeFormatInfo w System.Globalization i DateTime wszystkie niezbędne informacje mogą być odzyskane:

  • DateTimeFormatInfo.CurrentInfo.FirstDayOfWeek
  • DateTimeFormatInfo.CurrentInfo.GetMonthName (miesiąc)
  • DateTimeFormatInfo.CurrentInfo.GetAbbreviatedDayName ((DayOfWeek) dayNumber)

Miesiąc w kalendarzu można wyrenderować w tabeli:

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

Aby określić liczbę pustych komórek na początku, można użyć czegoś takiego:

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

Ponieważ istnieje maksymalnie 31 dni w miesiącu imaksymalnie 6 pustych komórek na początku, miesiąc może być renderowany na maksimum Ceil (37/7) = 6 rzędów. Zatem w ciągu miesiąca można wyrenderować maksymalnie 42 komórki, niektóre z nich będą puste.

Nowy wiersz jest wstawiany do tabeli, co 7 komórek (liczba dni w tygodniu).

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);
}
}

Po prostu dodaj dodatkowe łącze w niepustych komórkach do żądanej trasy, gdy daty są z aktywnością.