2011-07-27 5 views
2

모바일 웹 개발 http://www.asp.net/learn/whitepapers/add-mobile-pages-to-your-aspnet-web-forms-mvc-application에 대한 Steven Sanderson의이 링크를 읽었으며 aspx에서 면도기 코드를 실행하려고합니다. URL에서asp.net mvc에서 어떻게 masterpage를보기에서 전환합니까?

면도기 코드 :

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

내 영문 적응 :

<%@ 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. 

이 있습니까 영문에서이 작업을 수행 할 수있는 방법을 ?

답변

1

대답은보기에서 마스터 페이지를 변경해서는 안됩니다. 컨트롤러가이를 처리해야합니다.

구문 상, <@% Page > 선언은 표준 asp.net 코드가 아니며 올바르게 해석되지 않습니다. 존재하지 않는 masterpage를로드하고 있기 때문에 발생하는 오류 일 가능성이 큽니다. 하지만이 문장은 단지 디자인 타임 기능 일뿐입니다.

  • masterpage에 대한보기를 개발 :

    은 무엇 당신이해야 할 것은 이것이다.

  • 두 번째 마스터 페이지를 작성하고 <asp:ContentPlaceholders>에 정확히 같은 이름을 사용하십시오.
  • 이것을 처리하는 컨트롤러 메서드에서 마스터 페이지를 바꿉니다. 아마도 더 좋은 방법은 Request.IsMobile과 같은 어떤 기준에 대한 요청을 검사하고 올바른 마스터 페이지를 주입하는 특성을 작성하는 것입니다. ViewResult의 MasterPage 속성을 사용하여 마스터 페이지를 삽입 할 수 있습니다.
+0

어디에서 났는지, 결코 면도기는 언급하지 않았습니다. 도움이되지는 않지만 렌더링 프로세스가 시작되기 전에 마스터 페이지를 설정해야합니다. –

+0

링크를 따라 가면 면도기 엔진을 사용하여 설명하고있는 Steve Sanderson이 ... 컨트롤러에서 마스터 페이지를 설정할 수 있는지 알지 못했습니다. 새로운 정보를 제공해 주셔서 감사합니다. :-) – quakkels

+0

나는 이것을 내려야 만한다. 컨트롤러에서 마스터를 교체하는 것은 절대적으로 끔찍합니다. 모든 행동 메소드에 "this.IsMobile?"Mobile ":"Regular "또는 그와 유사한 행이있을 것을 제안합니다. 기사가 말하고이 행동을 한 번 정의한 것처럼 더 나은 장소는 사용자 정의보기 엔진 또는 Layout.cshml입니다. – jfar

관련 문제