38

既存の.masterページを保持して、新しいASP.NET MVC 3 Razorビューで使用することはできますか?私はこれを試しました:

@{
   LayoutPage = "~/Views/Shared/Site.master";
 }

そしてそれは私にこのエラーメッセージを与えます:

ファイル'〜/Views/Shared/Site.master'は存在しないか、有効なページではないため、レンダリングできませんでした。

4

6 に答える 6

34

残念だけど違う。マスターページはASPXWebFormsビューエンジンの一部であり、MVCフレームワークではないため、Razorはそれと相互運用できません。

1つのオプションは、前述のようにマスターを複製することですが、すべてのコードをコピーするのではなく、マスターページをRazorおよびASPXマスターが埋め込むことができるASPXパーシャルの束に分解することができます。次に、各ページと部分を1つずつRazorに変換し始め、最終的にASPXマスターを取り除くことができます。

于 2010-08-14T15:36:55.683 に答える
25

これを行う方法は実際にあります。Scott Hanslemanには、このトピックに関するブログ投稿があります:http: //www.hanselman.com/blog/MixingRazorViewsAndWebFormsMasterPagesWithASPNETMVC3.aspx

少しハックですが、実行可能です。説明されているアプローチをカプセル化してさらにクリーンアップすることで、物事がどのように相互に接続されているかを気にせずにビューとコントローラーを構築できると思います。

于 2011-01-27T18:10:35.677 に答える
8

共有フォルダで_Layout.cshtmlを探す必要があると思います...

これがaspxとrazorviewengineの比較です。

http://weblogs.asp.net/shijuvarghese/archive/2010/07/29/aspx-and-razor-view-engines-in-asp-net-mvc-3-preview-1.aspx

これは、かみそりでネストされたマスターページについての興味深い投稿でもあります...

http://weblogs.asp.net/fredriknormen/archive/2010/08/01/asp-net-mvc-3-0-preview-1-razor-and-nested-master-pages.aspx

HTH

于 2010-08-13T17:07:24.070 に答える
2

MVCでの.NETユーザーコントロールのサポート

MVCは.Netユーザーコントロールを公式にはサポートしていませんが、それらによって生成されたhtmlを取得できます。次のコードは、数十のASCXファイルで構成されるページから生成されたHTMLを取得します。

  • MVCサイト内に.Netユーザーコントロールを含むASPページを作成します。
  • ユーザーコントロールによって生成されたHTML文字列を取得します。
  • MVCレイアウトページでHTML文字列を使用します。

コード例:

try{

    using (WebClient client = new WebClient())  
    {

        client.Headers[HttpRequestHeader.UserAgent] = "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13";

        myHTML = client.DownloadString("http//www.mysite.com/header.aspx");
    }

} catch ( WebException exception )

{

    using(var reader = new StreamReader(exception.Response.GetResponseStream())){

        Response.Write(reader.ReadToEnd());

    }

}

@Html.Raw(myHTML ); //OR Response.Write(myHTML);

@RenderBody(); 
于 2012-11-28T15:45:45.590 に答える
1

このプロセスを自分で行ったばかりですが、MattHawleyによるこの方法がうまく機能していることがわかりました。

このアプローチは、必要なマスターページを使用する標準のaspxページを作成することで機能します。その後、必要に応じてコンテンツプレースホルダーを追加できます。次に、使用するビューの名前を使用してRenderPartialを呼び出します。次に、コントローラからの応答が、レンダリングする実際のビューに渡されます。

これを機能させるにはもう少し配管が必要であり、コントローラーでビューをレンダリングするには拡張機能メソッドを呼び出す必要がありますが、セットアップすると非常にうまく機能します。

于 2013-10-18T14:10:16.767 に答える
-1

Razorでは、レイアウトページを使用して同じ機能を実現できます。

Razorを使用したレイアウト/マスターページ

于 2011-08-13T05:42:39.960 に答える