在asp.net mvc中,如何从视图中切换母版页?

时间:2011-07-27 18:33:44

标签: asp.net-mvc mobile viewengine

我一直在阅读Steven Sanderson关于移动网络开发http://www.asp.net/learn/whitepapers/add-mobile-pages-to-your-aspnet-web-forms-mvc-application的链接,我正试图在aspx中执行他的剃刀代码。

来自网址的剃刀代码:

@{ 
    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 个答案:

答案 0 :(得分:1)

答案是不应该从视图中更改母版页。控制器应该处理它。

从语法上讲,<@% Page >声明不是标准的asp.net代码,它不会被正确解释,你得到的错误可能是因为它正在加载一个不存在的主页。但请记住,该陈述仅仅是一个设计时特征。

您需要做的是:

  • 针对母版页开发视图。
  • 构建您的第二个母版页,确保为所涉及的任何<asp:ContentPlaceholders>使用完全相同的名称。
  • 在处理此问题的控制器方法中,交换母版页。也许更好的方法是构建一个属性来检查请求的任何条件,例如Request.IsMobile,并注入正确的母版页。您可以使用ViewResult的MasterPage属性注入母版页。