年の12ヶ月をカレンダー形式で表示するMVC Webページを作成したいと考えています。その月の毎日のうちに、何らかの活動(データベースからのデータ)がある日付だけを太字で表示します。アクティビティの日付も/ Activity/2008/12/25のようなルートにハイパーリンクされていますasp.net mvcのカスタムハイパーリンクを含む暦年を表示
私はasp.net ajaxコントロールツールキットのカレンダーコントロールを試そうとしていますが、 。
年の12ヶ月をカレンダー形式で表示するMVC Webページを作成したいと考えています。その月の毎日のうちに、何らかの活動(データベースからのデータ)がある日付だけを太字で表示します。アクティビティの日付も/ Activity/2008/12/25のようなルートにハイパーリンクされていますasp.net mvcのカスタムハイパーリンクを含む暦年を表示
私はasp.net ajaxコントロールツールキットのカレンダーコントロールを試そうとしていますが、 。
カレンダーのレンダリングは非常に複雑ではありません。 System.Globalizationおよび日時でのDateTimeFormatInfoを使用して、すべての必要な情報を取得することができる。
_ _ _ 1 2 3 4
5 6 7 8 9 ...
:のDayOfWeek)dayNumber)カレンダーの月は、表にレンダリングすることができますそこに最大31日は月にあり、初めで最大6個の空のセル、月が上にレンダリングされるように
DateTime date = new DateTime(year, month, 1);
int emptyCells = ((int)date.DayOfWeek + 7
- (int)DateTimeFormatInfo.CurrentInfo.FirstDayOfWeek) % 7;
:このような初め何かが使用可能で、空のセルの数をdermineする
最大Ceil(37/7)= 6行。したがって、1ヶ月に最大42個のセルがレンダリングされ、そのうちのいくつかは空になります。
新しい行が7(各セルの日数)のセルに挿入されます。日付が活性とされている場合
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\"> </td>");
} else {
writer.WriteLine("<td class=\"cal-day\"\">" + date.Day + "</td>");
date = date.AddDays(1);
}
}
また、単に所望の経路に非空のセルに追加のリンクを追加します。
私はあなたの推薦に行くことになった。たくさんのコントロールがありますが、なんらかの理由でこれが簡単になるはずです。ああ、あなたはint days = DateTime.DaysInMonth(年、月)を忘れてしまった。応答していただきありがとうございます。 – Mouffette
はい、あなたは正しいです。私は同じ方法を感じ、その後私は年間のカレンダーを実装する必要があるたびにこれに戻って来ることがわかった:) – Aleris
サンプル実装ありがとう。しかし、そこにはエラーがあります。日付= date.AddDays(1)は最後に入ります。それ以外の場合は、空のセルがレンダリングされても日付が増えます。したがって、2009年5月には最初の5つが欠落しています事実上すべての日付が間違っています。 –