質問者さんは去ってしまったようですが、自分が関わったスレッドがこのまま放置されて終わってしまうのも何なので回答を書いておきます。
ボタンクリックでカレンダーを表示し、ユーザーがカレンダーの日付を選択してその日付をサーバーに送信できれば、後はその日付を元にサーバー側で良しなに対処できるということで、2 案書いておきます。
(1) Ajax Control Toolkit の CalendarExtendar
質問にあるカレンダーの画像が Ajax Control Toolkit の CalendarExtendar です。
元々の使用目的は Date Picker としてテキストボックスと併用し、ユーザーのテキストボックスへの日付入力に便宜を図るものです。ユーザーがカレンダー上の日付を選択すると、それがテキストボックスに設定されます。
カレンダーをボタンクリックして表示するのは、以下のデモページの上から 3 番目の「Calendar with an associated button」のようにして可能です。
Calendar Demonstration
https://ajaxcontroltoolkit.devexpress.com/Calendar/Calendar.aspx
テキストボックスが不要なら CSS で非表示にできます。ただし、テキストボックスを非表示にするとカレンダーの表示位置を JavaScript を書いて調整する必要があります。その方法は以下の記事の Solution 1 が参考になると思います。
Ajax CalendarExtender pop up position
https://www.codeproject.com/Questions/322320/Ajax-CalendarExtender-pop-up-position
結果は以下の画像のようになります。

ユーザーがカレンダー上で選択した日付は自動的にはサーバーには送信されません。日付をサーバーに送信するには、何らかの手段でポストバックするか(ポストバックすればテキストボックスの値が送信される)、自力でスクリプトを書いて送信することになります。
(2) Calendar と ModalPopupExtender
ASP.NET の Calendar サーバーコントロールと Ajax Control Toolkit の ModalPopupExtender を組み合わせて、ボタンクリックで Calendar をポップアップして表示する案です。
上記 (1) の CalendarExtendar とは異なりテキストボックスは不用です。
また、ユーザーがカレンダー上の日付を選択すると自動的にポストバックがかかり、サーバーには選択した日付が送信されます。サーバー側では Calendar の SelectionChanged イベントのハンドラでそれを取得できます。
ただし、ユーザーがカレンダーに表示された別の月を選択するとポストバックが発生して画面全体が再描画されてしまうというデメリットがあります。それを避けるのは UpdatePanel を使って可能です。