4 Stimmen

Anzeige eines Kalenderjahres mit benutzerdefinierten Hyperlinks in asp.net mvc

Ich bin auf der Suche nach einer MVC-Webseite zu erstellen, die die 12 Monate des Jahres in einem Kalenderformat anzeigt. Innerhalb jeder Tag im Monat werde ich fett nur die Daten, die jede Aktivität (Daten aus der Datenbank) haben. Die Daten mit Aktivität würde auch zu einer Route wie /Activity/2008/12/25 hyperlinked werden

Ich bin über zu versuchen, die asp.net Ajax Control Toolkit Kalender-Steuerelement zu versuchen, aber wunderte sich, wenn jemand anderes hatte jede Beratung.

7voto

Aleris Punkte 7801

Das Rendern eines Kalenders ist nicht besonders kompliziert. Durch die Verwendung von DateTimeFormatInfo in System.Globalization und der DateTime können alle erforderlichen Informationen abgerufen werden:

  • DateTimeFormatInfo.CurrentInfo.FirstDayOfWeek
  • DateTimeFormatInfo.CurrentInfo.GetMonthName(month)
  • DateTimeFormatInfo.CurrentInfo.GetAbbreviatedDayName((DayOfWeek)dayNumber)

Ein Monat im Kalender kann in einer Tabelle wiedergegeben werden:

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

Um die Anzahl der leeren Zellen am Anfang zu bestimmen, kann etwas wie folgt verwendet werden:

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

Da ein Monat maximal 31 Tage und maximal 6 leere Zellen am Anfang hat, kann ein Monat auf maximal Ceil(37 / 7) = 6 Zeilen dargestellt werden. Es sind also maximal 42 Zellen in einem Monat darzustellen, von denen einige leer sein werden.

Alle 7 (Anzahl der Tage in einer Woche) Zellen wird eine neue Zeile in die Tabelle eingefügt.

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

Fügen Sie außerdem einfach einen zusätzlichen Link in den nicht leeren Zellen zur gewünschten Route hinzu, wenn die Daten mit Aktivität sind.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X