2011-10-25 20 views
4

MVC 3を既存のWebフォームサイトに追加する際には、すべてではありませんが、 webformsサイトのグローバルasaxを変更して、MVCとweb.configの変更をサポートしました。しかし、まだいくつかの問題があります。既存のWebformsサイトでMVCを実行

  1. MVC 3は貪欲である - それは私がMVCではなく、私が欲しいものであるWebフォームページのエントリーページに移動ルートに移動してデフォルトでは、サイトのルートを引き継ぎます。ルートにナビゲートするときに明確にするには、mysite.com/default.aspxに移動します。私は

    routes.MapPageRouteを追加し、サイトのルートを修正するには(「SiteRoot」、「」、「〜/ Default.aspxの」) は、しかし、これは、私は

    のようなめちゃくちゃなURLで終わるようなMVCのURLを壊します

    http://localhost:86/default?action=Index&controller=Blog サイトルートがwebforms default.aspxに移動し、MVC URLが正しいように修正するにはどうすればよいですか?

  2. MVC 3は、Webフォームが使用するHttpHandlersのカップルを壊します。具体的には、私はハンドラーを使って、画像にヘッダーを期限切れにし、スタイルシートとjavascriptファイルを結合するリソースハンドラーを追加します。 RegisterRoutesにルートが存在しないので、リソースハンドラ経由でスタイルシートが読み込まれないように、これらのハンドラが壊れてしまいます。将来は失効します。また、httpcompressionモジュールも動作を停止します。では、Webフォームのためのhttphandlerとモジュールをどのように維持しながら、サイトのMVC 3部分のルートを保持していますか?

これらの2つの問題は、MVC3とウェブフォームのミキシングに関するさまざまなブログ記事には誰も言及していません。

ああ、私はです.IgnoreRoute( "{resource} .aspx/{* pathInfo}")はglobal.asaxにあります。リソースハンドラはaspxファイル拡張子を使用しているので、グローバリゼーションでは、hanlderは機能しますが、そうは思わないと思います。

私が知っているもう1つのオプションは、wbeformsサイト内にフォルダを設定し、それを独自のアプリケーション開始ポイントとして実行することです。しかし、私は本当にsite.com/blog/blog/index第1のブログは独自のアプリケーションポイントとして実行されているフォルダで、第2のブログはコントローラです。

答えて

1

最も良い解決策は、ではありません。は、既存のwebformsサイトとMVC 3をミックスしています。その代わりに、MVCディレクトリを独自のアプリケーションの開始点として設定し、そのフォルダからMVCを実行して、MVCディレクトリと既存のwebformsアプリケーションが完全に無知になるようにします。このようにして、リソースハンドラとhttpmodule、およびその他のハンドラは、すべてwebformsサイトで動作します。そして、この方法でドメインルートはデフォルトでMVCではなくwebforms default.aspxに移動します。また、私はそのエントリをglobal.asaxに入れなければなりません。これは順番にmvc 3のURLを不正にします。次の問題は、私はURLのlkeブログ/ブログ/ポスト/ 1を持っていないように、URLを処理することでした。これを修正するには、htmlアクションリンクを

@Html.ActionLink(item.PostTitle, "Post", New With {.id = item.PostId}, Nothing) 

に変更してから、グローバルに変更してください。asax - 単に{コントローラ}を削除(へのデフォルトルートを変更します。だから今の代わりにブログ/ブログ/インデックスやブログ/ブログの/ポスト/ 1私は重複のブログずに適切なクリーンURLを取得

routes.MapRoute(_ 
     "Default", _ 
     "{action}/{id}", _ 
     New With {.controller = "Blog", .action = "Index", .id = UrlParameter.Optional}, New String() {"RiderDesignMvcBlog.Core.Controllers"}) 

url - blog/post/1

0

ハンドラの拡張子を真のハンドラ.ASHXとして変更し、代わりに無視することをお勧めします。

+0

よろしくお願いいたします。 –

関連する問題