web-dev-qa-db-ja.com

ASPX .MasterページでのRazorビューは可能ですか?

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

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

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

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

38
bkaid

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

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

34

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

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

25
Matt Honeycutt

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

これがaspxとかみそりのビューエンジンの比較です...

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

8
server info

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(); 
2
Jack Nichols

私自身、このプロセスを経たばかりだったので、 Matt Hawleyによるこの方法 が効果的であることがわかりました。

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

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

1
Derek Ekins

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

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

0
mahesh