2011-07-27 76 views
2

我一直在閱讀Steven Sanderson關於移動web開發http://www.asp.net/learn/whitepapers/add-mobile-pages-to-your-aspnet-web-forms-mvc-application的這個鏈接,我試圖在aspx中執行他的剃鬚刀代碼。從URL在asp.net mvc中,如何從視圖切換主頁面?

剃刀代碼:

@{ 
    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代碼,它不會被正確解釋,你得到的錯誤可能是因爲它正在加載一個不存在的masterpage。但請記住,聲明僅僅是一個設計時間特徵。

你需要做的是這樣的:

  • 發展你對一個母版視圖。
  • 建立你的第二個母版頁,確保使用相同的任何<asp:ContentPlaceholders> EXACT相同的名稱。
  • 在處理此操作的控制器方法中,交換masterpage。也許更好的方法是構建一個屬性,檢查Request.IsMobile等任何標準的請求,並注入正確的母版頁。您可以使用ViewResult的MasterPage屬性注入主頁面。
+0

不知道從哪裏得到的,從未提及過剃刀。不是說它會有幫助,你需要在渲染過程開始之前設置masterpage,而不是在它之前。 –

+0

如果你按照鏈接,它顯示史蒂夫桑德森正在做我所描述的使用剃刀引擎...我不知道你可以設置控制器中的masterpage。感謝新的信息,我就是這樣做的! :-) – quakkels

+0

我必須投票。在控制器中交換主控器是非常糟糕的。您建議讓每個操作方法都有「this.IsMobile?」,「Mobile」:「Regular」或類似的行。更好的地方是自定義視圖引擎,或者像Layout文章中所說的定義這種行爲的Layout.cshml而不是遍佈整個地方 – jfar

相關問題