ダウンロード サンプルファイル (1.2 MB)
(2)スクリプトの実行方法を調べる
AJAX Control ToolkitのExtenderコントロールはWeb Form上で扱います。開発時はコントロールを張り付けてプロパティ、メソッドなどを設定するだけで利用できますが、実行時にはページ上で「JavaScript」が動作しています。つまり、利用したい機能を実際にWeb Form上で実行して実行ページのソースからJavaScriptの部分だけ取得してViewPage上で記述すれば簡単に実行できます。ここではAJAX Control Toolkitの利用方法の詳細は省略し、手順だけ列挙します。
- ASP.NET Web サイト(もしくはプロジェクト)を作成
- Default.aspx上にToolkitScriptManagerとTextBoxを配置
- TextBoxコントロールのスマートタグからCalendarExtenderを選択する(図8)
- 実行
この状態で表示される画面は図9のようになります。

ここで、ソースを確認しますが、Sys.Application.initializeメソッド近辺のみチェックしてください。
<script type="text/javascript">
//<![CDATA[
Sys.Application.initialize();
Sys.Application.add_init(function() {
$create(AjaxControlToolkit.CalendarBehavior, {"id":"TextBox1_CalendarExtender"}, null, null, $get("TextBox1"));
});
太字の部分がCalenderExtenderコントロールをインスタンス化している部分です。
ご覧の通り、AJAX Control Toolkitの機能をインスタンス化するには、$create関数を使います。この$create関数の構文は次のとおりです。
$create( インスタンス化する機能の型 [, プロパティ情報(名前/値のペアで記述) [, イベント・ハンドラ情報(名前/ハンドラのペアで記述) [, ほかの機能への参照 [, 機能を関連付ける要素]]]] )
この部分をコピーしておき、ASP.NET MVCのサイトで利用したいViewPage上にペーストします。もちろん、idの設定などは修正します。以下に追加したばかりのViewPage上に設定したソースを記述します。
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<%-- (1)スクリプト宣言部分 --%>
<script src="../Scripts/MicrosoftAjax.debug.js" type="text/javascript"></script>
<script src="../Scripts/AjaxControlToolkit.ExtenderBase.BaseScripts.js" type="text/javascript"></script>
<script src="../Scripts/AjaxControlToolkit.Common.Common.js" type="text/javascript"></script>
<script src="../Scripts/AjaxControlToolkit.Common.DateTime.js" type="text/javascript"></script>
<script src="../Scripts/AjaxControlToolkit.Common.Threading.js" type="text/javascript"></script>
<script src="../Scripts/AjaxControlToolkit.Compat.Timer.Timer.js" type="text/javascript"></script>
<script src="../Scripts/AjaxControlToolkit.Calendar.CalendarBehavior.js" type="text/javascript"></script>
<script src="../Scripts/AjaxControlToolkit.Animation.Animations.js" type="text/javascript"></script>
<script src="../Scripts/AjaxControlToolkit.PopupExtender.PopupBehavior.js" type="text/javascript"></script>
<script src="../Scripts/AjaxControlToolkit.Animation.AnimationBehavior.js" type="text/javascript"></script>
<link rel="stylesheet" type="text/css" href="../Scripts/AjaxControlToolkit.Calendar.Calendar.css" />
<%--CSSの上書き--%>
<link rel="stylesheet" type="text/css" href="../Content/Calendar.css" />
<%-- (2)スクリプト実行部分 --%>
<script type="text/javascript">
Sys.Application.add_init(appInit);
function appInit()
{
$create(AjaxControlToolkit.CalendarBehavior, null, null, null, $get('birthDate'));
}
</script>
<h2>Calendar</h2>
<label for="birthDate">Birth Date:</label>
<br />
<%-- (3)スクリプト動作要素 --%>
<%= Html.TextBox("birthDate") %>
<br /><br />
</asp:Content>
ご覧の通りスクリプト宣言部分(1)と、実行部分(2)を切り貼りしただけであることがお分かりいただけるかと思います。後はスクリプトが動作する要素を指定しただけです(3)。若干変わっている点として、Calendar.cssの追加とスクリプトソースの宣言部分です。
Calendar.cssでは、マスタページに適用されているSite.cssに記述されているTableタグのスタイルを上書きしています(この記述がないと、カレンダーのレイアウトが崩れてしまいます。)。
/* Site.css上で指定されたCSSを上書き */
.ajax__calendar table
{
border: solid 1px #FFFFFF;
}
.ajax__calendar table td
{
padding: 0px;
border: solid 1px #FFFFFF;
}
なお、スクリプトソースはパスの指定方法に注意が必要です。
多少煩雑な作業ですが、AJAX Control Toolkitの機能を自作するよりは簡単なので、ぜひ覚えて活用してください。
ASP.NET Web Formでは既定で階層型のURLが生成されていました。そしてIDE側の機能として、WebForm上にスクリプトソースを適用させると相対パスを自動補完してくれていました(図10)。

ASP.NET MVCでは、URLの生成が階層型からルーティング型に変更されています。つまり、図10と同等のフォルダ構成であっても、ルーティングにより図11のようなURLが生成されます。
図10と11の場合、Viewsフォルダの有無から、スクリプトソースが格納されているフォルダへの相対パスが変わります。
Webサイト http://localhost/Views/Home/Calendar.aspx MVC http://localhost/Home/Calendar
現時点ではASP.NET MVCのプロジェクトを開いていていも、IDE側の相対パスの自動補完がWebFormの仕様のままなので、開発者が手でパスを書き直す必要があります。
ただ、都度相対パスを修正する作業は思いのほか煩雑です。ASP.NET MVCでは、Url周りをサポートするUrlHelperクラスが用意されているので、UrlHelperクラスのContentメソッドを使うことで大幅に作業を軽減できます。
Contentメソッドは、ASP.NET MVCのプロジェクトに合ったリソース(ScriptやCSS)の相対パスを生成してくれます。構文は次のとおりです。
<script src="<%= Url.Content("~/Scripts/AjaxControlToolkit.ExtenderBase.BaseScripts.js") %>" type="text/javascript"></script>
より安全に相対パスの指定を行いたい場合はUrl.Contentメソッドを使いましょう。
まとめ
今回は、Web技術において重要なセキュリティ部分と、既存のASP.NET AJAXの資産をうまく活用する方法について紹介しました。
セキュリティ部分は、ASP.NET MVCならではの部分をピックアップしましたが、あくまで基本です。Webアプリケーションである以上、セキュリティ対策をし過ぎて困ることはありません。必要に応じて追加の対策をしてください。
AJAX Control Toolkitの利用は、ポイントさえ押さえればサイト内の機能を簡単に拡張できます。使いたいコントロールがあれば、今回紹介した方法を基に調べて活用してください。
なお、今回紹介した部分はどちらも基盤レベルの話ですので、アプリケーション内にうまく組み込んで活用していただければ幸いです。
参考文献
この記事は参考になりましたか?
既に会員の方はを行ってください。
- ASP.NET MVCフレームワーク 正式版 入門連載記事一覧
-
- ASP.NET MVCと周辺技術の活用テクニック
- ASP.NET MVCのセキュリティ対策とクライアントサイドスクリプト活用方法
- ASP.NET MVCの開発応用編1 ~リポジトリパターンをマスターする~
- この記事の著者
-
山田 祥寛(ヤマダ ヨシヒロ)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
WINGSプロジェクト ナオキ(ナオキ)
<WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書、記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア


