- PR -

[ASP.NET]既定の設定で .aspx ページが継承する分離コードクラスを指定する

1
投稿者投稿内容
Ten.
ベテラン
会議室デビュー日: 2003/04/03
投稿数: 67
投稿日時: 2004-07-28 12:55
VS.NET2003でVB.NETによりWebアプリケーションを作成しています。

Webフォームを追加した場合、既定では分離コードクラスは System.Web.UI.Page を継承しますが、これを System.Web.UI.Page を継承した独自のクラスを継承するようにしています。

現在は、Webフォームを追加した際に分離コードクラスの継承元を手で毎回書き換えていますが、最初から独自クラスを継承しているようにできないか調べたところ、以下のような方法を見つけました。

Web.config の <pages> 要素の pageBaseType 属性に独自クラスを指定するという方法です。
独自クラスの名前を TestWebApp.BasePage とした場合、以下のように記述してみました。
コード:
<pages pageBaseType="TestWebApp.BasePage" />


しかし、Webフォームを追加した際には相変わらず System.Web.UI.Page を継承したソースが生成されます。

これは、この設定の意味を勘違いしているのか、それとも設定の内容が間違っているのでしょうか?
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2004-07-28 13:34
Webフォームを追加時に、おそらくテンプレートファイルからコピーしているのでしょう。
探してみたら、
\Program Files\Microsoft Visual Studio .NET 2003\Vb7\DesignerTemplates\NewWebFormCode.vb
がそれっぽい。
Ten.
ベテラン
会議室デビュー日: 2003/04/03
投稿数: 67
投稿日時: 2004-07-28 15:46
todoさん、ご返答ありがとうございます。

ただ、テンプレートファイルを書き換える方法だと多分他のプロジェクトで追加したWebフォームにも反映されてしまうでしょうから、申し訳ないのですが今回の件では使えそうにありません。

と言いつつも、気になったので試してみました。

教えていただいたテンプレートファイルを書き換えてからWebフォームを追加してみたのですが、書き換えた内容は反映されていませんでした。

テンプレートファイルの内容をよく見るとコメントが英語のままでローカライズされていませんでしたので、どうやら単純にこのファイルが読み込まれているわけではなさそうです。
nodera
大ベテラン
会議室デビュー日: 2003/09/08
投稿数: 200
投稿日時: 2004-07-28 17:08
こっちのフォルダにあるやつかな?
\Vb7\VBWizards\DesignerTemplates\1041

自分も同じようにPageクラスから派生した独自クラスをベースにしたWebフォームの追加をやりたかったので、オリジナルのウィザード一式をコピーし、カスタムウィザードを作っています。
(ただしVBではなくC#版)

VBであれば、次のものをコピーして使えばうまくいくかもしれません。
\Vb7\VBProjectItems\WebForm.vsz
\Vb7\VBProjectItems\Web Project Items\UI\WebUIProjectItems.vsdir
\Vb7\VBWizards\WebForm

ただしこちらで作成したC#版はaspxとcsファイルをうまく結合するのに一工夫いりました。
いまいち何が問題だったか憶えていないのですが、たしか、スクリプトの中でこんなことしたり、
--------
strTemplateFile = strTemplatePath + "\\WebForm1.aspx.cs";
var subItem = AddFileToVSProject(strItemRoot + ".aspx.cs", selProj, selObj, strTemplateFile, false);

strTemplateFile = strTemplatePath + "\\WebForm1.aspx";
var item = AddFileToVSProject(strItemRoot + ".aspx", selProj, selObj, strTemplateFile, false);
subItem.Properties("SubType").Value = "ASPXCodeBehind";
--------
aspxの先頭を
--------
<%@ Page language="c#" Codebehind="[!output ITEM_NAME].cs" Inherits="[!output NAMESPACE].[!output SAFE_CLASS_NAME]" AutoEventWireup="false" %>
--------
というようにしたら結果うまくいったというように、中身をよく理解してなかったりします(笑


[ メッセージ編集済み 編集者: nodera 編集日時 2004-07-28 17:09 ]
Ten.
ベテラン
会議室デビュー日: 2003/04/03
投稿数: 67
投稿日時: 2004-07-28 18:49
noderaさん、情報ありがとうございます。

前の投稿でテンプレートファイルをいじくっているときに、提示していただいたあたりのファイルも見ていたのですが「なんだか面倒そうだな」と思ってあっさりあきらめました。

こちらの方法ですと、ソリューションエクスプローラからWebフォームを追加する場合、[追加]-[Web フォームの追加]ではなく、[追加]-[新しい項目の追加]から自作したテンプレートを選ぶということですよね。

せっかく教えていただいたのですが、そもそもが楽しようと思ってのことなので、そこまでやる根性はなさそうです。。。面目ない


ちなみに、最初の投稿にある pageBaseType 属性についてですが、「Web.config の内容が開発ツール(VS.NET)の動作に影響するって変だよな」と思い、もしやと思い調べてみました。

結論から言いますと、これは Page ディレクティブの Inherits 属性の規定値でした。

何で最初から気付かなかったんだろう・・・
1

スキルアップ/キャリアアップ(JOB@IT)