none
MVCでカスタムメンバーシップ RRS feed

  • 質問

  • MembershipProviderを継承したクラスは

    Modelsの下ではなくApp_Codeの中に作るのが合っているのでしょうか。

    DBにアクセスするものはModelsの中にまとめるもの、と思っていました。

    でもエラーになったのでクラスファイルを移動させたら動きました。

    2011年11月24日 7:25

回答

  • Controllersに入れるのはそもそも配置場所として正しくないよーな。

    Modelsに配置するとき、ってnamespaceどうなってますでしょうか。
    で、そのnamespaceを含めた形でweb.config内でmembershipのtype設定してますか?
    名前空間がずれてしまっているために読み込めない、とかじゃないかと思うんですが。。。

    まぁ、でもMemberShipProviderをModelsに配置するのもなんか違う気もします。
    別にフォルダを追加して配置するほうがいいような。
    それならApp_Code内で動くということでそこに置いてもいいように思います。


    あおい情報システム株式会社 小野修司(どっとねっとふぁん)
    2011年11月24日 9:27

すべての返信

  • ASP.NET MVCはWebアプリケーションプロジェクトとして作成するため、ControllerやViewのように特定のディレクトリ配下を探すような設定になっているもの以外のクラスはどこに置いても動くはずです。
    あとRazorのヘルパークラスはApp_Codeの中に配置する必要があるんだっけかな?

    > でもエラーになったのでクラスファイルを移動させたら動きました。

    どのようなエラーが発生したのでしょうか?
    それがわからないとなんともいえないかな。


    あおい情報システム株式会社 小野修司(どっとねっとふぁん)
    2011年11月24日 7:41
  • ありがとうございます。

    CustomMembershipProvider.vbをModelsやControllersの中に配置すると

    AccountController.vbのMembership.ValidateUserで

    「型 'CustomMembershipProvider' を読み込めませんでした。」

    が発生します。

    App_Codeの中ならログインできます。

    デバック開始で確認しているからでしょうか。
    2011年11月24日 8:16
  • Controllersに入れるのはそもそも配置場所として正しくないよーな。

    Modelsに配置するとき、ってnamespaceどうなってますでしょうか。
    で、そのnamespaceを含めた形でweb.config内でmembershipのtype設定してますか?
    名前空間がずれてしまっているために読み込めない、とかじゃないかと思うんですが。。。

    まぁ、でもMemberShipProviderをModelsに配置するのもなんか違う気もします。
    別にフォルダを追加して配置するほうがいいような。
    それならApp_Code内で動くということでそこに置いてもいいように思います。


    あおい情報システム株式会社 小野修司(どっとねっとふぁん)
    2011年11月24日 9:27
  • ありがとうございます。

    App_Codeを採用します。

    名前空間は確認してみます。

    2011年11月24日 10:47
  • Web アプリケーションプロジェクトでは App_Code フォルダを使うのは
    止めた方がよさそうです。

    App_Code folder doesn’t work with Web Application Projects (WAPs)
    http://vishaljoshi.blogspot.com/2009/07/appcode-folder-doesnt-work-with-web.html

    2011年11月24日 13:44
  • > Web アプリケーションプロジェクトでは App_Code フォルダを使うのは止めた方がよさそうです。

    とはいえ、ASP.NET MVC3でヘルパークラスを作成したときはApp_Codeに置かないと動かなかったよーな。。。
    Razorのコンパイル動作の関係だと思いますけど。
    ちゃんと調べてみないとな。。。


    あおい情報システム株式会社 小野修司(どっとねっとふぁん)
    2011年11月25日 2:19
  • とはいえ、ASP.NET MVC3でヘルパークラスを作成したときはApp_Codeに置かないと動かなかったよーな。。。
    Razorのコンパイル動作の関係だと思いますけど。
    ちゃんと調べてみないとな。。。


    ヘルパー クラスは、ルートの Web.config ではなくて、Views にある Web.config に追加しないといけない、という話ではないですか?
    少なくともヘルパー クラス自体は App_Code に置かなくてもいいはずです。

    ちなみに MVC 3 でカスタムの MembershipProvider を入れてみたことがありますが、ルートの Web.config に書けば普通に使えていましたが。
    2011年11月25日 6:14
  • 私がヘルパークラス、と言っているのはMembershipProvider の話じゃありません。
    Razorで@helper メソッドを切り出して利用する場合の話として書いてました。

    http://codezine.jp/article/detail/5947?p=2

    ここに書いてある話ですね。
    App_Codeディレクトリ内に配置する必要があります。

    「ヘルパークラス」という記述が悪かったようですね、すみません。


    あおい情報システム株式会社 小野修司(どっとねっとふぁん)
    2011年11月25日 8:47
  • 私がヘルパークラス、と言っているのはMembershipProvider の話じゃありません。


    もちろん、それは存じておりましたが、HTML ヘルパー (拡張メソッドの方) と混同してました。
    こちらこそ、すみません。
    2011年11月25日 8:52
  • MVC も Razor も、ちょっとかじった程度の知識しかない自分がコメントする
    のもなんですが・・・

    > とはいえ、ASP.NET MVC3でヘルパークラスを作成したときはApp_Codeに置
    > かないと動かなかったよーな。。。
     
    以下のページ(小野さんが紹介されたページの原文)に、いろいろ書いてあ
    りました。

    「何で App_Code など使うのか?」というコメントに対し、今のところ他に
    選択肢がないので、やむを得ず App_Code フォルダを使ったというようなこ
    とが書いてありました。それによる好ましからざる副作用もあるようです。

    @helper は仕方がないのかもしれませんが、カスタム MembershipProvider
    を App_Code フォルダに入れる必要はないと思います。(Visual Studio と
    ASP.NET による二重コンパイルを避ける方法はあるようですが、わざわざ
    App_Code に配置して問題の種をまく必要はないという意味です)

    ASP.NET MVC 3 and the @helper syntax within Razor

     

     


    2011年11月25日 12:11