web-dev-qa-db-ja.com

.aspxページを既存のMVC 4プロジェクトに追加する方法

ASP.NET MVC 4プロジェクトに取り組んでいます。このMVCプロジェクトに追加したい2 .aspx別のWebFormsプロジェクトのページ。いくつか質問があります。

  1. これはどこにコピーすればよいですか.aspxファイルと、ルートをどのようにconfigしますか?
  2. これをどのように伝えればよいですか.aspx使用するページ~/Shared/_Layout.chtmlマスターページとして?
  3. さらに、この。aspxページ。ascx controlsを使用します。どこに保管すればよいですか?
  4. web.configファイルをどのように変更しますか?

this 質問に投稿された links を確認しましたが、古くなっているようです。多くのリンクはMVCをWebFormsに追加する方法を説明していますが、私はずっと探しています。

役立つリンクをいただければ幸いです。ありがとう!

12
Shukhrat Raimov

ソリューション:

結局のところ、既存の[〜#〜] mvc [〜#〜]プロジェクトに。aspxページを追加することは、mvcをに追加するよりもさらに簡単な作業です。 aspx。私にとって最も興味深いことは、WebフォームとMVCの両方が、1つのプロジェクト共有の範囲で、IISのランタイムoneランタイムであることを知ることでした。

だから私がやったこと:

  1. 。aspxページを別のプロジェクトからrootに追加[〜#〜] mvc [〜#〜]プロジェクト
  2. 新しいマスターページを作成ウェブフォームページ(プロジェクトを右クリック->追加->新しいアイテム->マスターページ)
  3. マスターページ of WFおよび_ Layout.chtml MVCを同じにするマスター 'ビュー' = この素晴らしい記事@ Html.RenderPartial()内のメソッドを呼び出すことができます。aspx page
  4. 次のコードは、WebFormにRenderPartialメソッドを実装する方法を示しています。

    _public class WebFormController : Controller { }
    
    public static class WebFormMVCUtil
    {
    
        public static void RenderPartial( string partialName, object model )
        {
            //get a wrapper for the legacy WebForm context
            var httpCtx = new HttpContextWrapper( System.Web.HttpContext.Current );
    
            //create a mock route that points to the empty controller
            var rt = new RouteData();
            rt.Values.Add( "controller", "WebFormController" );
    
            //create a controller context for the route and http context
            var ctx = new ControllerContext( 
            new RequestContext( httpCtx, rt ), new WebFormController() );
    
            //find the partial view using the viewengine
            var view = ViewEngines.Engines.FindPartialView( ctx, partialName ).View;
    
            //create a view context and assign the model
            var vctx = new ViewContext( ctx, view, 
                new ViewDataDictionary { Model = model }, 
                new TempDataDictionary() );
    
            //render the partial view
            view.Render( vctx, System.Web.HttpContext.Current.Response.Output );
        }
    
    }
    _

    .aspxページのcodebehind.csに追加します。その後、次のようなWebフォームから呼び出すことができます。

    _<% WebFormMVCUtil.RenderPartial( "ViewName", this.GetModel() ); %>
    _
  5. 私はすべてのページで「メニュー」のみを共有していたので、部分的なビューに追加し、次に呼び出します_ Layout.chtml

    _@Html.Partial("_Menu")
    _

そしてMasterPage.Masterのように:

_    <% WebFormMVCUtil.RenderPartial("_Menu", null ); %>
_

これですべてです。結果として、私の_ Layout.chtmlおよびMasterPage.Masterは同じ共有部分ビューを使用します。そして、ページを移動するだけで。aspxページにアクセスできます。ルーティングシステムに問題がある場合は、App_StartのrouteConfigにroutes.IgnoreRoute("{resource}.aspx/{*pathInfo}");を追加できます。

私が使用したソース:

  1. aspform mvcとwebformsを組み合わせる
  2. WebフォームとASP.NET MVCの混合
  3. MixingRazorViewsAndWebFormsMasterPages
  4. ウェブフォーム内に部分ビューを含める方法

それが後で誰かを助けることを願っています。

17
Shukhrat Raimov