【Web開発】【ASP.NET】コードファイルへの分割

気温も上がっていよいよ春本番という感じですね。世の中は予断を許さない状況ですが、やることはしっかりやっていきましょう。ということで、今回は開発ネタです。

ASP.NETでWebサイトを開発していれば、.aspxというファイルはおなじみですが、私は今までこのファイルにコードとマークアップを一緒に入れてしまっていました。特に理由はないのですが、最初にそうやってしまったからでしょう。しかし、ページが大きくなってくると、コードとマークアップの同居では、見通しが悪くなってきます。そこで、既存の.aspxファイルをマークアップ(.aspx)とコード(.aspx.csなど)に分けてみようかと思いました。

まずは、マークアップファイルである.aspxファイル(以降test.aspxとしましょう)に対するコードファイルtest.aspx.cs(C#の場合。Visual Basicならtest.aspx.vb)を同じ階層に作成します。空のファイルを作ってもよいのですが、適当な.aspxファイルを作って、そのコードファイルをコピー、リネームする方が簡単です。仮に、test2.aspx.csを作ってtest.aspx.csとしてコピーしたら、その中身は以下のようになっているはずです。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class test2 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
    }
}

部分クラスの名前が作成時のtest2になっていますので、これをtestに書き換えておきます。これでコードファイルの準備は終わりです。

public partial class test2 : System.Web.UI.Page

ちなみに、既存のマークアップファイルでは、先頭の@Pageディレクティブは以下のようになっていることが多いでしょう。

<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" Title="なおさん亭::新館" %>

ここでは、言語はC#、マスターページはMasterPage.master、タイトルは"なおさん亭::新館"であることだけが示されています。コードファイルを分離するには、新たにCodeFile属性とInhetits属性を加えます。

<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" Title="なおさん亭::新館" CodeFile="test.aspx.cs" Inhetits="test" %>

そして、マークアップファイルの<script runat="server">の中身をごっそりコードファイルの中に移します。中身を移してしまえば<script runat="server">自体が不要になりますから、タグごと削除してしまいます。コード部分がマークアップファイルから亡くなると、すごくスッキリしますよ。しかも、コードファイルの中では、エディタペイン上部にクラス名やメソッド名などが出ますから、編集もやりやすくなります。

ところで、ファイルを分割しただけだと、コードファイルに移した部分でサーバコントロールIDが認識されなかったり、コンパイルでエラーが出たりします。これは、分割前の状態をVWDが覚えているからのようなので、いったんプロジェクトを閉じて、改めて読み込むと、きちんと認識されるようになります。

分割するのが、.aspxでなくascx(ユーザコントロール)でもほぼ同じです。この場合、@Pageディレクティブでなく@Controlディレクティブを触ることになる点が異なりますが、行うことはほぼ同じです。この場合、ClassName属性に加えてInhetits属性を加えて、その値とコードファイル中の部分クラスの名前を合わせて下さい。

コメント