2009-05-28 14 views
1

は、私は次のことを試してみました:なぜこの継承ビューはレンダリングされませんか?

私はこれらのファイルを含む共有ライブラリ(.dll)を持っている:

  • ビュー
    • 検索
      • PowerSearch.aspx
      • パワーサーチ.aspx.cs
      • PowerSearch.aspx.designe r.cs

PowerSearch.aspxファイルには、私のhtmlコードが含まれています。 PowerSearch.aspx.csファイルがこれを含んでいます

using System.Web.Mvc; 
using CommonProject.Web.Shared.Controllers; 

namespace CommonProject.Web.Shared.Views.Search 
{ 
    public partial class PowerSearch : ViewPage<SearchViewData>{} 
} 

そして、私はcatuallyでも、それはとにかく使用していない原因を気にしないでくださいデザイナー。

強く型付けされたビューではありません。
私は基本的に、私のasp.net mvcプロジェクトから既存の作業ビューを取り出し、別のライブラリに入れて、 "これは複数のmvcプロジェクト間で共有される"のように "Shared"という単語を含むように名前空間を変更しました。

私の元のasp.net mvcプロジェクトで、私は同じ構造を作成しましたが、aspxページにはasp @Pageルールだけが含まれています。

マッチングCSファイルが含まれています

using System.Web.Mvc; 
using CommonProject.Web.Shared.Controllers; 

namespace CommonProject.Web.DRE.Views.Search 
{ 
    public partial class PowerSearch : CommonProject.Web.Shared.Views.Search.PowerSearch { } 
} 

はないか、コンパイル・エラーなし実行時例外はありません。巨大な空白のページしかありません...

誰かがアイデアを得ましたか?

+0

私は推測しているのは、DLLのHTMLはレンダリングされていないからです。確信はないけど。 –

答えて

0

アセンブリ(dll)が、参照しているbinフォルダにあることを確認してください。また、web.configにアセンブリの名前空間を追加してみてください。そうしないと、継承されたページを見つけることができなくなります。

 
<pages> 
     <namespaces> 
     <add namespace="CommonProject.Web.Shared"/> 
+0

dllはbinフォルダにあります。私は名前空間を追加しませんでした。しかし、私たちがないと、名前空間の規則は重要ではありません。 迷惑なことは何も投げていないということです。ただの空白のページ... –

+0

私はまた、ビューが文字通り私のbinフォルダにコピーされていることに気付きました。アセンブリ内の –

+0

にはaspx、aspx.csおよびaspx.designer.csがありますか?アセンブリ内にaspx.csファイルが本当に必要になります。 – David

0

クラスライブラリにASPXページを追加しようとするのはどれくらいの労力でしたか? [新規アイテムの追加...]を選択すると、デフォルトのリストには表示されません。

コントローラとモデルを別々のライブラリDLL /アセンブリに保存しても問題ありませんが、ビューを保存または共有するのは簡単ではないことは間違いありません。問題は、デフォルトビューエンジンがディスク上の特定のフォルダ(〜/ Views/Controller/ViewName.as [pc] xまたは〜/ Views/Shared/ViewName.as [pc] x)を見ていることです。ライブラリDLLを使用すると、コンパイラは実際にASPXファイルで何ができるのか分かりません。それはコードではないので、あなたが 'ビルドアクション'セットを持っていなければ、それを無視するだけです。いろいろな「組み込みアクション」がありますが、あなたの唯一のオプションは「コピー」と「リソースとして埋め込み」です。あなたがそれを必要とするフォルダ(あなたのASP.NET MVC WebプロジェクトのViewsフォルダ)にコピーしませんが、ビルドスクリプトまたは'Custom Tool'を書くことができます。 )。

ハメット(Castle Monorail)の名声(今はMS Employee)のサンプルが出てきて、DLLに掘り下げてビューを引き出すことができるカスタムVirtualPathProviderクラスを使用してライブラリアセンブリ内にビューを格納することができます(リソースとして埋め込まれています)。サンプルアプリケーションはただのコンセプトなので、ロードブロッキングをいくつか打つかもしれませんが、うまくいくように見え、刺激的な方向に見えます。彼のブログはMEF and ASP.NET MVC sampleです。コードをダウンロードして調べてみましょう。

このブログの記事ASP.NET MVC Pluginsは、上記のものと同じ作者によるものですが、それは同様の質問が尋ねられたStackOverflowの上ここでは別のポストに話題とポイントの別の検査を与える:Using VirtualPathProvider to load ASP.NET MVC views from DLLs

私は、Phil Haaaaaaaaaaaaaaaaaackの投稿をデータベースに保存しています。 Webフォームの代わりにRubyスクリプトを使用しているので、自分のニーズに合わせてサンプルを修正できるかどうかは100%はわかりません。こちらをご覧ください:Scripting ASP.NET MVC Views Stored In The Database

+0

Thx a束。私は以前にフィルからの投稿を見ていましたが、この文脈でそれを考えなかったのです。 mef&mvcサンプルをチェックします。 –

+0

私は "追加=>新しい"私はちょうど同じビューを持つ3つのサイトのプロジェクトを持っていませんでした。私は別々のプロジェクトで意見を得る方法を見つけなかったので、私はそれらの3つすべてを維持し続けました。人間の過失の予想される問題で...これは実際に別の "それは、私はこの事を集中しています"という瞬間でした。 –

+0

また、あるプロジェクトのビューをライブラリにドラッグしただけです。しかしそれは理想ではないようです。 IDEはそれをもうビューとして認識しないので、IDEはHtmlとModelのプロパティをサポートしていません。( –

0

.aspxファイルのソースはどのように見えますか?また

<%@ Page Title="" Inherits="CommonProject.Web.Shared.Views.Search.PowerSearch" %&> 

、あなたのpageディレクティブで全体の名前空間を指定しない場合、あなたは<名前空間/ >セクションにこれを追加することができます:あなたはこのようなpageディレクティブであなたのビューを継承していることを確認しますあなたのweb.configで:

<add namespace="CommonProject.Web.Shared.Views.Search"/> 
+0

これはチェックですが、継承しているビューの名前を同じにしたいのでネームスペースを含めませんでしたとにかく名前空間の指示が必要です。 –

関連する問題