2016-09-28 1 views
0

MVC의 특정 영역에 속한 웹 페이지에만 포함시키려는 스타일 시트가 있습니다.ASP.NET MVC의 특정 영역에있는 페이지에만 스타일 시트를 포함시키는 방법은 무엇입니까?

저는 기본적으로 Areas/<Area Name>/Views/_ViewStart.cshtml을 얻지 만이 영역에 렌더링되는 기본 레이아웃을 원합니다. 내 지역에 대한 _ViewStart 파일에 Styles.Render("My Bundle Name")에 전화를 추가하는 시도

@ { 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 

하지만 <link> 태그는 HTML 소스에 표시되지 않습니다처럼 내 지역의 _ViewStart 파일을 찾습니다.

나는 심지어 스타일 시트를 포함한 HtmlHelper 확장 국도에서 MVC에서 현재 지역의 이름을 반환 방법 등을 생성하는 방법 :

@if (Html.AreaName() == "MyArea") 
{ 
    @Styles.Render("...") 
} 

코드 AreaName() 확장 방법 :

public static string AreaName<TModel>(this HtmlHelper<TModel> htmlHelper) 
{ 
    return htmlHelper.ViewContext.RouteData.Values["area"] as string; 
} 

하지만 항상 null을 반환합니다. 심지어 응용 프로그램을 디버깅하고 "지역"디버거 탭 주위에 찔렀다. 경로 데이터에는 컨트롤러, ID 및 액션 이름이 포함되지만 내 영역의 페이지를 렌더링하는 경우에도 지역 이름은 포함되지 않습니다.

배경

난 어떤 MVC 응용 프로그램에 설치할 수있는이 지역에 대한 NuGet 패키지를 만드는 오전. 우리 조직에서는 부트 스트랩을 기반으로 기본 HTML 및 CSS 레이아웃이 제공되므로 레이아웃에 대한 예측 가능성이 있지만 베팅을 헤지하고 해당 영역에서 렌더링 된 페이지의 내 영역에만 적용되는 가져 오기 스타일 만 가져오고 싶습니다.

MVC의 특정 영역에있는 페이지, 다른 영역이나 페이지가없는 페이지에 스타일 시트를 포함하려면 어떻게해야합니까?

+0

이 영역의 레이아웃으로''~/Views/Shared/_Layout.cshtml ''를 사용하고 있다면'~/Views/Shared/_Layout.cshtml'에서'Styles.Render ("My Bundle Name" Views/Shared/_Layout.cshtml' 파일? – Gavin

+0

@Gavin : 작동하지만,이 스타일 시트는 사이트의 모든 페이지에 있습니다. 내 지역의 페이지 용으로 가져온 스타일 시트 만 필요합니다. –

+0

각 요소에 대해 CSS 클래스를 직접 지정하여 무시하십시오. 내가 당신을위한 옵션이 아닌 것 같아? –

답변

1

당신은이 일을해야 DataTokens

에서 지역 이름을 읽어야합니다.

public static string AreaName<TModel>(this HtmlHelper<TModel> htmlHelper) 
{ 
    return htmlHelper.ViewContext.RouteData.DataTokens["area"] as string; 
} 
+0

에 대한 코드로 내 queston을 업데이트했습니다. mvc5 앱에서이 코드를 시도했는데 성공했습니다. @if (String.Equals (Html.AreaName(), "MyArea")) {// stuff stuff here}' – Shyju

+0

이 메소드를 호출 할 때 메인 프로젝트에 머물러 있어야하지 않습니까? 레이아웃 (주요 프로젝트의 일부) 어쨌든? – Shyju

+0

그래서 나는 완전한 id10t입니다. HtmlHelper 확장 기능의 내 너겟 패키지에서는 원래 DataTokens [ "area"]를 반환하지 않고 대신 원래 값 [ "area"]을 반환했습니다. 이것은 내가 복사하고 붙여 넣었다고 생각하면 실제로 발생하지 않습니다. :) –

1

그것은 우아한 해결책이 아니다, 그러나 당신이 당신의 ViewStartPageData 값을 설정 한 다음 주 Layout 페이지에서 확인 할 수 :

_ViewStart.cshtml 해당 지역

@{ 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
    PageData["AdditionalStyleBundle"] = "~/Content/myCSSBundle"; 
} 

_layout.cshtml

<head> 
    @if (PageData.ContainsKey("AdditionalStyleBundle")) 
    { 
     @Styles.Render(PageData["AdditionalStyleBundle"]); 
    } 
</head> 
+0

이것은 실제로 흥미로운 해결책입니다. 미래를 염두에 두어야 할 것입니다. –

관련 문제