• 検索結果がありません。

d_appendixB-asp10appdev.indd

N/A
N/A
Protected

Academic year: 2021

シェア "d_appendixB-asp10appdev.indd"

Copied!
14
0
0

読み込み中.... (全文を見る)

全文

(1)

付録

B

jQuery

Visual Studio 2010 の ASP.NET から、jQuery が正式にサポートされました。ASP.NET MVC アプリケーショ ンを作成する際にも、[Scripts]フォルダにjQueryのライブラリ(jquery-1.4.1.js)が配置されています。

ここではユーザー登録のページでjQueryを使ったユーザー名チェックを実装してみましょう。

jQueryとは

jQuery とは、JavaScript で作成したフリーのクラスライブラリです。JavaScript はブラウザ上で動作する スクリプト言語ですが、ブラウザの表示をきめ細かく制御できる半面、コーディングやデバッグに非常に手 間が掛かっていました。

jQuery は、ブラウザでよく扱う操作や Ajax の機能を集めた高機能なライブラリです。このライブラリを 利用すると、HTMLタグの表示や動的な追加などが非常に簡単に行えます。

統合開発環境(Visual Studio 2010)では、このjQueryを扱う高機能なコーディングの環境が揃えられて い ま す。 通 常、JavaScriptのコー ディン グにはメ モ帳な どのテキス トエデ ィターが 使 われ るの で、 JavaScript の関数や jQuery の各種メソッドは、マニュアルなどを参照しながら 1 つ 1 つ記述しなければなり ませんでした。しかし、Visual Studio 2010では、C#のコーディングと同様にインテリセンスの機能が用意 されています。 これにより、非常に手早く、JavaScriptのコーディングが可能になっています。 図B-1 jQureyとブラウザの関係

(2)

Ajaxとは

通常、Webアプリケーションは、ユーザーが何かの操作をするごとにサーバーに問い合わせをします。こ れを画面遷移といいますが、ユーザーがリンクをクリックしたり、フォームのボタンをクリックする度に サーバーにデータが送信され、サーバーが画面のデータを返しています。 図B-2 Visual studio 2010のインテリセンス 図B-3 通常のC/Sの図 この方法の場合、1回ごとに画面を再描画するためにユーザーの操作感が悪くなります。Windowsアプリ ケーションのように一画面で、色々な操作(入力チェックや、データの自動変換など)を実現することがで きません。 この画面遷移を極力少なくするための技術が Ajaxになります。ボタンをクリックしたときの画面の再描 画を、全画面ではなく、一部分だけを更新するという方法が取られています。Ajaxは、jQueryのライブラリ の一部として配布されています。

(3)

ASP.NET MVC アプリケーションでも、この Ajax を使って画面の一部だけを更新することが可能です。こ こでは、ショッピングサイトのユーザー登録時に、あらかじめユーザー名をチェックする機能を追加します。 このチェックの方法に、画面の一部だけを変更する Ajaxの機能を利用します。 図B-4 Ajaxを使った場合

最初のユーザーチェック

最初に、ユーザー名を登録するためのビュー(Register.aspx)にjQueryのスクリプトを組み込んでいき ましょう。

<asp:Content ID="registerContent" ContentPlaceHolderID="MainContent" runat="server"> <script src="../../Scripts/jquery-1.4.1.js"></script> ... <script language="javascript"> function check() { $('#message').load("/Account/UserCheck" ); return false; } </script> <div class="editor-field"> <%: Html.TextBoxFor(m => m.UserName) %>

<input type="button" onclick="check()" value="チェック" /> <span id="message"></span> <%: Html.ValidationMessageFor(m => m.UserName) %> </div>

1

2

3

4

5

コードエディターにViews/Account/Register.aspxファイルを表示する。

Index.aspx ファイルに次のコードを記述する(色文字部分)。

(4)

<script src="../../Scripts/jquery-1.4.1.js"></script>

1

<script language="javascript">

2

function check() { $('#message').load("/Account/UserCheck" ); return false; }

3

<input type="button" onclick="check()" value="チェック" />

4

<span id="message"></span>

5

jQuery のスクリプトファイルを読み込みます。 JavaScript を記述するタグです。本来であれば、HEAD 部に記述するのですが、ここでは説明のため にユーザー名のテキストボックスの直前に記述しています。

jQuery では、$( < id 名> ) として、簡単に ID を持つタグを指定できます。Ajax の呼び出しは、load メ ソッドにURLを指定します。フォームが実行されないように、メソッドの戻り値をfalseに設定します。 ユーザー名のチェックするためのボタンを配置します。 Ajax で呼び出した戻り値を表示するための場所です。

コードの解説

ビューを追加する

Ajax の応答を返すためのビューを作成します。

[ソリューションエクスプローラー]で[View]−[Account]を右クリックして、[追加]−[ビュー]を クリックする。 →[ビューの追加]ダイアログボックスが表示される。

[ビュー名]に、UserCheckと入力する。

[追加]ボタンをクリックする。 → 新しいビュー(UserCheck.aspx)が作成される。

内容をすべて削除したのち、UserCheck.aspxファイルに次のコードを記述する(色文字部分)。

(5)

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<dynamic>" %> OK

1

public ActionResult UserCheck() { return View(); }

1

戻り値を表示するために、OKと記述します。これがAjaxの呼び出しに対する応答になります。 ここでは、ビューを呼び出すためだけのメソッドを書きます。後から、ユーザーテーブルから読み込 む記述をします。

コードの解説

コードの解説

コントローラーを修正する

ビューを表示するためのコントローラーを追加します。

コードエディターにControllers/AccountController.csファイルを表示する。

AccountController.cs ファイルに次のコードを記述する(色文字部分)。

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<dynamic>" %>

OK

1

public ActionResult UserCheck() {

return View(); }

(6)

動作の確認

[標準]ツールバーの[デバッグ開始]ボタン をクリックする。

Internet Explorer が表示されることを確認す る。

トップ画面で[ログオン]ボタンをクリックす る。

ログオン画面で[登録]ボタンをクリックする。

[チェック]ボタンをクリックする。 → メッセージに「OK」と表示されることを確 認する。

Internet Explorer の閉じるボタンをクリック する。 → プログラムが終了し、統合開発環境に戻る。

2

5

3

6

(7)

アカウントのデータベースでチェックする

Ajax の確認ができたので、具体的にデータベースに接続してユーザー名をチェックします。ログオンの チェックをするデータベースは、[App_Data]フォルダーにあるASPNETDB.mdfファイルになります。 最初に、[サーバーエクスプローラー]にデータベースを登録します。

[サーバーエクスプローラー]ウィンドウの [データ接続]を右クリックして、[接続の追 加]をクリックする。 →[接続の追加]ダイアログボックスが表示さ れる。

[データソース]の[変更]ボタンをクリック する。 →[データソースの変更]ダイアログボックス が表示される。

[データソース]のリストから[Microsoft SQL Server データベース ファイル]を選択し、 [OK]ボタンをクリックする。

[接続の追加]ダイアログボックスに戻り、 [データベースファイル名]で、[MvcShopping ¥App_Data]フォルダー内にある「aspnetdb. mdf」ファイルを選択する。

1

2

(8)

[テスト接続]ボタンをクリックして、接続確 認を行う。「テスト接続に成功しました。」とい う表示を確認して[OK]ボタンをクリックす る。

[接続の追加]ダイアログボックスに戻り、 [OK]ボタンをクリックする。 →[サーバーエクスプローラー]にデータベー スが追加されることを確認する。

4

5

6

3

(9)

データクラスを作成

[サーバーエクスプローラー]を利用してデータクラス(LINQ to SQLクラス)を作成します。このデータ クラスを使って、ユーザーテーブルをチェックします。

[ソリューションエクスプローラー]で[Model] を右クリックして、[追加]−[新しい項目]を クリックする。 →[新しい項目の追加]ダイアログボックスが 表示される。

[インストールされたテンプレート]リストか ら[Visual C#]−[データ]をクリックする。

中央のリストで、[LINQ to SQLクラス]を選 択する。

ファイル名を[DataASPNETDB.dbml]とする。

[追加]ボタンをクリックする →[ソリューションエクスプローラー]にデー タクラスが追加される。

[サーバーエクスプローラー]を表示させ、 [データ接続]−[aspnetdb.mdf]−[テーブル] のツリーを開く。

[aspnet_Users]テーブルを、データクラスの 上にドラッグアンドドロップする。

[aspnet_Users]テーブルのデータクラスが作 成されることを確認する。

8

6

4

2

5

7

3

1

(10)

コントローラーを修正する

aspnet_Users テーブルに接続してユーザー名をチェックします。

コードエディタにControllers/AccountController.csファイルを表示する。

AccountController.cs ファイルに次のコードを記述する(色文字部分)。 using System.Configuration; using System.Data.Linq;

public ActionResult UserCheck( string user ) { if (user == null) { ViewData["result"] = "NG"; } else { // web.config から接続文字列を取得 string cnstr = ConfigurationManager.ConnectionStrings[ "ApplicationServices"].ConnectionString; // データベースに接続する

DataContext dc = new DataContext(cnstr); // ユーザー一覧よりチェック

var item = from u in dc.GetTable<aspnet_Users>() where u.UserName == user

select u; if ( item.Count() == 0 ) { ViewData["result"] = "OK"; } else { ViewData["result"] = "NG"; } } return View(); }

1

2

3

4

if (user == null) { ViewData["result"] = "NG"; }

1

念のため、ユーザー名が指定されていない場合は、「NG」にします。ビューに表示するために ViewData コレクションを使います。

コードの解説

(11)

ビューを修正する

応答を返すためのビューを変更します。

コードエディターにViews/Account/UserCheck.aspxファイルを表示する。

UserCheck.aspx ファイルに次のコードを記述する(色文字部分)。

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<dynamic>" %>

<%: ViewData["result"] %>

1

// web.config から接続文字列を取得

string cnstr = ConfigurationManager.ConnectionStrings[ "ApplicationServices"].ConnectionString;

// データベースに接続する

DataContext dc = new DataContext(cnstr);

2

// ユーザー一覧よりチェック

var item = from u in dc.GetTable<aspnet_Users>() where u.UserName == user

select u;

3

if ( item.Count() == 0 ) { ViewData["result"] = "OK"; } else { ViewData["result"] = "NG"; }

4

ログイン用のデータベースに接続します。web.configにある「ApplicationServices」の設定から、 データベース接続文字列を取得します。 Ajax から渡されたユーザー名がテーブル内のデータと一致するかを検索します。 一致しない場合(0件の場合)は、登録可能なので「OK」を返します。既にユーザー名が存在してい る場合は、「NG」を返します。

(12)

<%: ViewData["result"] %>

1

コントローラーが設定した値を表示します。この文字列が Ajaxのコールバック関数に渡されます。解 析の都合上、「%>」の右側には改行を入れないように注意してください。

コードの解説

ビューを修正する

アカウントを登録するためのビューを修正します。Ajaxの戻り値をチェックして、メッセージを表示します。

コードエディターにViews/Account/Register.aspxファイルを表示する。

Register.aspx ファイルに次のコードを記述する(色文字部分)。 <script language="javascript"> function check() { // ユーザー名を取得

var username = $('#UserName').val(); if (username == "" ) { alert("ユーザー名を入力してください"); return false; } // サーバーでチェック $('#message').load("/Account/UserCheck", { user: username },

function (text, status) { if (text == "OK") { $(this).text("利用できます"); $(this).css("color", ""); } else { $(this).text("利用できません"); $(this).css("color", "red"); } }); return false; } </script>

1

2

3

4

(13)

var username = $('#UserName').val();

1

ユーザー名を取得します。テキストボックスから値を取得する場合は、valメソッドを使います。 HTML のタグは、ID 名を使って、「$( < ID 名> )」のように簡単に指定できます。

コードの解説

if (username == "" ) { alert("ユーザー名を入力してください"); return false; }

2

$('#message').load("/Account/UserCheck", { user: username },

3

function (text, status) { if (text == "OK") { $(this).text("利用できます"); $(this).css("color", ""); } else { $(this).text("利用できません"); $(this).css("color", "red"); } });

4

ユーザー名が空白だった場合は、エラーメッセージを表示します。 ユーザー名をチェックするための Ajaxを呼び出します。loadメソッドを使い、URLを指定します。こ こでは、パラメーターとしてユーザー名を渡しています。「http://localhost/Account/UserCheck?user= <ユーザー名>」として呼び出します。 load メソッドでは、Ajax の戻り値をコールバック関数で受け取ることが可能です。ここでは、受け 取った戻り値が「OK」の場合は「利用できます」とメッセージを表示します。「NG」の場合は「利用で きません」と赤色で表示します。

(14)

動作の確認

[標準]ツールバーの[デバッグ開始]ボタン をクリックする。

Internet Explorer が表示されることを確認す る。

トップ画面で[ログオン]ボタンをクリックす る。

ログオン画面で[登録]ボタンをクリックす る。

ユーザー名が空白のまま[チェック]ボタンを クリックする。 → 警告メッセージが表示されることを確認す る。

ユーザー名にadminと入力して、[チェック] ボタンをクリックする。 →「利用できません」とメッセージが表示され ることを確認する。

未登録のユーザー名を入力して、[チェック] ボタンをクリックする。 →「利用できます」とメッセージが表示される ことを確認する。

Internet Explorer の閉じるボタンをクリック する。 → プログラムが終了し、統合開発環境に戻る。

5

6

7

2

5

3

8

参照

関連したドキュメント

Also, people didn’ t have to store food at home if they ate their meals at these restaurants.. Later, restaurants began to open in

※必ずこちらの画面から Netflix のアカウント設定に進んでください。. こちらのページを経由せず、直接

* 4 CEO Tim Cook introduced Wakamiya as“the oldest * 5 developer.”The day before the meeting, she had a chance to talk with him.. After she finished high school, she

キーワード:感染症,ストレスマネジメント,健康教育,ソーシャルネットワーキングサービス YOMODA Kenji : Concerns and stress caused by the novel coronavirus disease

2020 年 9 月に開設した、当事業の LINE 公式アカウント の友だち登録者数は 2022 年 3 月 31 日現在で 77 名となり ました。. LINE

アクセサリ・その他L. ACCESSORIES

法制執務支援システム(データベース)のコンテンツの充実 平成 13

※証明書のご利用は、証明書取得時に Windows ログオンを行っていた Windows アカウントでのみ 可能となります。それ以外の