複数の aspx で一つのクラスの処理を共有する方法は?

このQ&Aのポイント
  • ASP.NET 4.0 C# で、PC版、スマホ版、携帯版のページで共通の処理を行いたい場合、どのように実現するのが良いでしょうか?
  • 現在、PC版のクラスを継承させてスマホ版や携帯版のクラスを作成していますが、生成されるデザイナークラスの重複が問題となり、エラーが発生しています。
  • 手動でデザイナークラスを削除する方法ではなく、他に効果的な共通処理の実現方法はありませんか?
回答を見る
  • ベストアンサー

複数の aspx で一つのクラスの処理を共有したい

ASP.NET 4.0 C# の質問です。 PC版と、スマホ版と、携帯版のページがあって、 それぞれレイアウトは全然違うんですが、 持ってるコンポーネント(LabelやButtonやTextboxなど)と、 クラスでやる処理はほとんど同じです。 現在は、スマホ、携帯ページのCodeBehindのクラスに、 PCページのクラスを継承させているんですが、 スマホ、携帯ページの、XXXX.aspx.designer.cs クラスが自動生成されると、 継承してるPCページのクラスにも同じコンポーネントがあるので、 重複してエラーになってしまいます。 スマホ・携帯の XXXX.aspx.designer.cs を手動で消して、 エラーを解消してますが、自動生成されるものを手で弄るのは不味いので、 何か他にいい方法があれば教えてもらえませんか。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

現在のプロジェクトはおそらく、「ASP.NET Webアプリケーション」なのと違いますか? (*.csprojがあって、*.aspx/*.aspx.cs以外に*.designer.csが生成されるタイプ) これを、都度自動コンパイル型の「ASP.NET Webサイト」にする、という意味です。 新規で「Webサイト」プロジェクトを作成し、そこに*.aspxや*.aspx.csを移す。 他の*.csファイルは、APP_Codesフォルダに収容します。 「Webサイト」プロジェクトでは、*.designer.cs は発生しないので、ご希望の動作になりそうな気がします。

zigzagfire
質問者

お礼

回答ありがとうございます。 >現在のプロジェクトはおそらく「ASP.NET Webアプリケーション」なのと違いますか? はい。その通りです。 「Webアプリ」と「Webサイト」で、プロジェクトの種類が違うのですね。 しかし、「新しいプロジェクト」でプロジェクトの種類一覧が表示されますが、 その中に「Webサイト」というのは見当たりませんでした。 Visual Web Developer 2010 を使っているのですが、対応していないのかもしれません。

その他の回答 (1)

  • shockatz
  • ベストアンサー率80% (153/191)
回答No.1

スキームをASP.NET MVC3か4にできれば最高なんですけど。 おそらくそれは無理だと思うので、大規模サイトじゃなければASP.NET Webサイトプロジェクトに移すのはどうですか?

zigzagfire
質問者

お礼

回答ありがとうございます。 ASP.NET MVC で作り始めれば良かったと後悔しています。 ASP.NET Webサイトプロジェクトに移すというのは、どういう意味でしょう? プロジェクトは既にASP.NET Webサイトプロジェクトで作っています。

関連するQ&A

  • ASPX(C#)で別ファイルで自分で作成したクラスをインスタンスかする

    ASPX(C#)で別ファイルで自分で作成したクラスをインスタンスかするには? IIS6.0 + .netframework2.0です。 Windowsアプリを作成しその認証用に上記環境でライセンス認証だけをするプログラムを作りたいのですが・・・ Windowsアプリの方でまとめたライブラリをコピーしてそのまま使いたいのですが単純に配置しただけでは呼び出しができません。 たとえば以下のような状況です。 check.aspx ユーザーがアクセスするページ check.aspx.cs このファイル内でインスタンス化して使用したい lib/utils.cs インスタンスかしたいクラスが記述 check.aspx.cs内で using~で記述してもエラーになりますし その参照をどこかに書く必要があるのだろうな?とはわかるのですが .netでWEBアプリをいじるのは初めてなのでどこをどういじっていいのかわかりません。 よろしくお願いします。

  • .aspxのファイルが表示されません。

    外のIISと繋いだローカルのPCでASP.NETの作業をしているのですが、今回作成した[BRule.aspx]のファイルが、ローカルの「http://localhost/JprojH/BRule.aspx」で「サーバーが見つかりません」のエラーがでてしまいます。トップページから直接このページにいけるのですが、トップページのオブジェクトをクリックしても、単独で「http://localhost/JprojH/BRule.aspx」と入力しても同じ結果です。 原因は[BRule.aspx]にあると思うのですが、プロパティで読み取り専用も隠しファイルもチェックを外しています。 どのような原因が考えられますでしょうか? よろしくお願いいたします。

  • アンドロイドで、別のクラスのインスタンスを呼ぶ方法

    アンドロイドの場合、別のクラスのインスタンスを呼び出すにはどうしたら良いですか? どうしてもわからずとても困っています。どうかご教授下さい。 例えば、Activityを継承しているクラスAがImageViewを継承しているクラスIのインスタンスを呼び出したいとします。 通用ならクラスA内で、 ExtendsImageView myExtendsImageView = new ExtendsImageView(); なんてインスタンス変数もたせて、 myExtendsImageViewから変数なりメソッドなり呼び出せれば済む話なんですが、 アンドロイドの場合、 アプリの起動時に自動的にActivity継承クラスとImageView継承クラスのインスタンスが生成されるようです。 そしてそのインスタンスがどこにあるかわからないので、呼び出すことができません。 無理やり、 ExtendsImageView myExtendsImageView = new ExtendsImageView(); と新しくインスタンスをつくるのも変な気がします・・・。 どのようにすれば別のクラスのインスタンスを呼び出すことができるでしょうか?どうかご教授下さい。。

  • Visual-C#の event キーワードの「意義」が分かりません

    Visual-C#というものを初めて触っている者です。 フォーム上にボタン等のコントロールを配置して、ボタンをダブルクリックすると、イベントハンドラをユーザが記述するコード部分(partial class)が表示されてくるのですが(Form1.cs)、このpartial classの残りの、ユーザが編集する必要のないコードはForm1.Designer.cs内に自動生成されます。 このForm1.Designer.cs内に、たとえば this.Button1.Click += new System.EventHandler( this.Button1_Click );  ←(1) のようなコードが自動生成されているわけです。 ここで、Button1とはButtonクラスのオブジェクトであり、ClickとはButtonクラスの(Controlクラスから継承した)Clickイベントだということです。 http://msdn.microsoft.com/ja-jp/library/system.windows.forms.control.click(VS.85).aspx public event EventHandler Click  ←(2) ここで使用されているEventHandlerとは何かというと、delegateです。 http://msdn.microsoft.com/ja-jp/library/system.eventhandler.aspx public delegate void EventHandler(Object sender, EventArgs e)  ←(3) 「イベントとは、コンピュータ・プログラムの実行に際し、何らかのアクションが発生した際にプログラムに発信される信号(これをメッセージと呼んだりする)をいう。」(『ウィキペディア(Wikipedia)』) この「イベント」を、.NetFrameworkのクラスライブラリでは、(2)のように「EventHandler」という名前のデリゲートクラス型の変数として定義しているわけですが、(2)の中の「event」というキーワードの「意義」が分かりません。 Controlクラス定義内で(2)式のように、コントロールの「クリック」イベントを、「EventHandler」という名前のデリゲートクラス型の変数と定義するというのなら、それはそれで分かるのですが、なぜ更に「event」というキーワードを付ける必要があるのかが、よく分からないのです。

  • ClientBase<TChannel> クラスの Dispose() メソッドについて

    お世話になっております。 http://oshiete1.goo.ne.jp/qa5572673.html に引き続き、 Dispose() メソッドの実装について不明な点があるので、よろしければご教示願います。 環境は、Visual C# 2008 Express Edition です。 .NET 3.5 まず、公開されているWebサービスに対して、 ソリューションエクスプローラより、サービス参照の追加で、Clientクラスを自動生成いたしました。 その自動生成されたクラス(仮に XSoapClient)が、System.ServiceModel.ClientBase<TChannel> クラスを継承しています。 ClientBase クラスは、IDisposable インタフェースを実装しているのですが、XSoapClient にも ClientBase にも、Dispose() メソッドの実装が見当たりません。 (自動生成のため、別の場所に作成されているのかもしれません。) using (XSoapClient client = new XSoapClient()) {  // ここにコード } とした場合に、client の Dispose() の実装がわからないため、 しっかりとコネクションが切れているのかが不明です。 Dispose() メソッド内では、Close() メソッドが呼ばれているのが普通なのでしょうか。 以上、よろしくお願いいたします。

  • C#のプロパティ設定のコードについて

    C#でユーザーコントロールを作成しています。 ※C#のカテゴリーがないので、こちらに質問させていただきます。 既存のコントロールを基底クラスとしているのですが、下記のコードで基底クラスのプロパティであるXXXを使用できないようにしました。 [Browsable(false)] [Obsolete("使用不可", true)] public new int XXX { get { return 0; } set { } } この、XXXに対してアクセスするコードはコンパイルエラーとなり、プロパティウィンドウにも表示されず、一応は使用できないようには出来ました。 ところが、コントロールをフォームに貼り付けて、他の使用可能なプロパティ(YYYプロパティとします)を変更すると、Form.Designer.csのInitializeComponent()に、XXXに値を設定するコードが自動生成されます。当然、そのままコンパイルすればエラーとなります。 ※XXXは、YYYの値に連動して値が変化する仕様です。YYYを追加したことでXXXが不要というか、あっては事故のもとになるので、使用不可にしました。 そこで、お教え願いたいのは、Form.Designer.csのInitializeComponent()に、プロパティの値を設定するコードが生成される仕組みです。若しくは、設定するコードが生成されないようにする方法です。 以上よろしくお願いします。

  • 【VC++】クラスの追加方法について

    VC++の操作方法についての質問です。 現在、VC++2005を用いて、MFCダイアログベースアプリケーションを作成しています。 クラスの追加方法についての質問ですが、 「クラスビュー」⇒「プロジェクト」で右クリック⇒「追加」⇒「クラス」でウィザードに従って追加すると、 ウィザード内で基本クラスをコンボボックスより選択しなければならず、 この方法で追加すると、選択した基本クラスを継承する形でクラスが自動生成され、クラスビューにマップと基本型が追加されます。 現在作成に当たって参照しているサンプルプログラムでは、新たにクラスが定義されているようですが、 マップと基本型は生成されておらず、基本クラスも定義されていないのです。 どのように操作すれば、サンプルのように基本クラスを定義せず、 マップと基本型も追加されずに、クラスを追加できるのでしょうか? また補足ですが、クラスを追加した後は、別の自分で定義した親クラスを継承させるようにコードを変更したいと思っております。 お分かりの方おられましたら、お手数ですがご教授お願い致します。

  • CMSに関する質問

    現在、どのCMSを使ってHP更新を 行うかを検討しております。 PC版のページを作成するとモバイル版のページも 自動生成できれば、一番良いのですが、 フリーのCMSのWordPress、MovableTypeは、 上記のように、モバイル版のページも自動生成できるのでしょうか? 宜しくお願い致します。

    • ベストアンサー
    • CSS
  • クラス型配列が派生クラス内フィールドを認識しません

    初めまして、お世話になります。JAVAの入門者です。継承のところまで進みましたが、代入と配列のクラス化で困っています。 環境は、Windows7 professional、JDK1.6.0_33、エディターはnotepad++ないしEclipse4.2です。プログラムは以下のとおりです: class PersonalData{ //継承元クラス String name; String phoneNumber; public String getContact(){ return name + "の連絡は" + phoneNumber + "に電話です"; } } class MailPersonalData extends PersonalData{ //派生クラス String mailAddress;  //問題となっているフィールド public String getContact(){ //オーバーライド return name + "の連絡は" + mailAddress + "にメールです"; } } public class Main{ //実行クラス public static void main(String[] args){ PersonalData[] pdArray = new PersonalData[100]; MailPersonalData mpd = new MailPersonalData(); PersonalData pd = new PersonalData(); pdArray[0] = mpd; //代入 pdArray[1] = pd; pdArray[0].name = "ジョン"; pdArray[0].mailAddress = "xx@xxxx"; //ここでエラー発生 pdArray[1].name = "ポール"; pdArray[1].phoneNumber = "012-345-6789"; System.out.println(pdArray[0].getContact()); System.out.println(pdArray[1].getContact()); } } というプログラムを作りましたが、コマンドプロンプトによるコンパイル時に Main.java27:シンボルが見つけられません シンボル:変数 mailAddress 場所:PersonalDataのクラス pdArray[0].mailAddress="xx@xxxx" ^   (^は.の直下にあります) とエラーが出てしまいます。Eclipse4.2では「解決できないか、フィールドではありません」と表示されます。 プログラム23行目のpdArray[0] = mpd; の代入によりpdArray[0]を派生クラス型にしましたが、派生クラス内のフィールドmailAddressがmainでは認識されていないようです。継承元クラスに記述されているphoneNumberはフィールドとして認識されています。 配列ではなくpd0、pd1といった個別のクラス型変数を作成した場合はmailAddressもフィールドとして認識され期待している結果が得られました。期待している結果は次のとおりです: ジョンの連絡はxx@xxxxにメールです ポールの連絡は012-345-6789に電話です 教えて!gooに似た質問がありましが、少し違うようです。(http://okwave.jp/qa/q1201607.html) その他、googleでキーワードに配列のクラス化、継承、オーバーライドなどを用いて検索しましたが解決法は得られませんでした。 なにぶん初心者の為、非常に的外れなことをやっていると思い誠に恐縮ですが、どうかご容赦ください。御教授のほど何卒宜しくお願い申し上げます。

    • ベストアンサー
    • Java
  • 現在のクラスを生成したクラスに渡したい

    親クラスで生成した子クラス(ダイアログ)から親クラス(ダイアログ)の関数などを使えるようにしたいと思っております。 ちなみに継承クラスで親クラスの関数を使うのではなく、親クラスそのもの(ダイアログ表示)を子クラスから変更できるようにしたいです。 (簡単になりますが…)プログラムの構成は以下のようになっており、thisポインタを渡すか所でエラーが起こってしまいます。 ------------------------------------------------ class AAA { BBB *b; void classBBB{ b = new BBB(this); // こういうことがしたいが、できない void fun( int a ); // ダイアログの表示が変更する(予定) }; class BBB { AAA *a; BBB(AAA *pDlg){ a==pDlg; } void fun(){ int b; a->fun(b); } // 親クラスの関数を呼び出したい }; ------------------------------------------------ ただし、class Aとclass Bを生成する上位階層のプログラム構築をすることはなしとします。 ------------------------------------------------ こんな感じ AAA *a = new AAA(); BBB *b = new BBB(a); ------------------------------------------------ どうしてもclass AAAからclass BBB呼び出したいと思ってます。 何か良い解決法があれば、教えていただきたいです。 宜しくお願い致します。