2010-12-15 5 views
3

MVC3とRazorを使用してかなり大きなWebアプリケーションの新しい領域を開発しています。残りはASP.NET 4 Webフォームベースです。このアプリケーションにMVCコンポーネントを含めることはできますか?これを達成するためには何が必要ですか?右の道にあなたを取得する必要がありますWebフォームアプリケーションにMVC 3のビューを含める

答えて

3

http://www.packtpub.com/article/mixing-asp.net-webforms-and-asp.net-mvc

。個人的に私の場合は、あなたのソリューションにMVCという新しいプロジェクトを追加すると、IIS/MVCAppで仮想ディレクトリを設定することができます。

+0

ソリューションに追加された新しいプロジェクト(つまり/ mvc)のルートはどのように設定しますか?これが役に立つ情報だと思ってください。 Andi G :) +1 – Andrew

+1

ルートを計画するときは、仮想ディレクトリではなくアプリケーションに対して相対的に解決されるため、仮想ディレクトリのURL(例: '/ mvc')を考慮してください。 –

4

WebFormsとMVCは、同じアプリケーションではなく、混合されていません。言い換えれば、各ページはWebFormsまたはMVCのいずれかですが、両方の要素を非常に簡単に含めることはできません。私が見つけた2つの主な回避策は次のとおりです。

  • すべてのMVC要素をAJAX化して、ページがロードされた後でAJAXを介して動的にロードできるようにします。
  • アプリケーションのMVC部分をWebFormsの部分と同じ外観にするために、マスタページの2つのバージョンとWebアプリケーションに共通のものがあります。

後者のアプローチを使用します。

+0

私は2つのマスターファイルアプローチを使用していると思います。私は私のmvc 'コンテンツページ'をホストするために私のaspxマスターページでIFrameを使用することを怖がっていた。 – ProfK

+0

@ProfK:私たちは、アプリケーションをJavaで書かれた別のアプリケーションに統合するためにiframeソリューションを使用しています。そのアプローチにはさらに多くの苦境があります。 – StriplingWarrior

0

MVCビューをWebフォームページに埋め込むために、このようなクラスを使用しています。逆方向にしようとします

public class HelperFactory 
{ 
    private class FakeController : Controller 
    { 
    } 

    private class FakeView : IView 
    { 
     public void Render(ViewContext viewContext, TextWriter writer) 
     { 
      throw new NotImplementedException(); 
     } 
    } 

    public static HtmlHelper<TModel> GetHelper<TModel>() 
    { 
     //HttpContextBase context = new HttpContext(HttpContext.Current); 
     FakeController controllerBase = new FakeController(); 
     RouteData rd = new RouteData(); 
     rd.Values.Add("controller", "Fake"); 
     RequestContext requestContext = new RequestContext(new HttpContextWrapper(HttpContext.Current), rd); 
     ControllerContext fakeContext = new ControllerContext(requestContext, controllerBase); 
     ViewDataDictionary vdd = new ViewDataDictionary(); 
     ViewContext viewCtx = new ViewContext(fakeContext, new FakeView(), vdd, new TempDataDictionary(), requestContext.HttpContext.Response.Output); 

     return new HtmlHelper<TModel>(viewCtx, new ViewPage()); 
    } 
} 
関連する問題