2011-07-27 14 views
2

私はこのリンクをモバイルウェブ開発http://www.asp.net/learn/whitepapers/add-mobile-pages-to-your-aspnet-web-forms-mvc-applicationについてSteven Sandersonから読んでいます。私はaspxで彼の剃刀コードを実行しようとしています。asp.net mvcでは、マスターページをビューからどのように切り替えることができますか?

URLからカミソリコード:

@{ 
    Layout = Request.Browser.IsMobileDevice ? "~/Views/Shared/_LayoutMobile.cshtml" 
              : "~/Views/Shared/_Layout.cshtml"; 
} 

私のaspx適応:

<%@ Page Title="" Language="C#" MasterPageFile=Request.Browser.IsMobileDevice ? "~/Views/Shared/mobile.Master" : "~/Views/Shared/site.Master" Inherits="System.Web.Mvc.ViewPage<dynamic>" %> 

が、これは私にこのエラーを与える:

ASP.NET runtime error: Only Content controls are allowed directly in a content page that contains Content controls. 

は、ASPXでこれを行う方法はあります?

答えて

1

答えは、マスターページをビューから変更しないでください。コントローラはそれを処理する必要があります。

構文上、<@% Page >宣言は標準のasp.netコードではなく、正しく解釈されません。おそらく、存在しないマスターページがロードされているためです。しかし、ステートメントは単なる設計時の機能であることを覚えておいてください。

  • マスターページに対するあなたの視野を開発:あなたがする必要がどのような

    はこれです。

  • 2番目のマスターページを作成し、<asp:ContentPlaceholders>に同じ名前を使用してください。
  • これを処理するコントローラメソッドでは、マスタページをスワップします。おそらく、より良い方法は、Request.IsMobileなどの条件の要求を検査し、正しいマスターページを挿入する属性を作成することです。 ViewResultのMasterPageプロパティを使用して、マスターページを挿入できます。
+0

あなたはそれがどこから得られたか分かりませんが、かみそりは言及しませんでした。それが助けになるとは限りません。レンダリングプロセスが始まる前に、マスターページを設定する必要があります。 –

+0

リンクをたどると、私は剃刀のエンジンを使用して説明していることをSteve Sandersonに示しています。コントローラーのマスターページを設定できるかどうかはわかりませんでした。新しい情報をありがとう、これは私がこれを達成する方法です! :-) – quakkels

+0

私はこれを投票しなければなりません。コントローラーでマスターを交換することは絶対に恐ろしいことです。すべてのアクションメソッドに "this.IsMobile?" Mobile ":" Regular "というような行があることを提案しています。カスタムビューエンジンやLayout.cshmlのほうが良いでしょう。 – jfar