2012-12-01 2 views
30

나는 @RenderSection("scripts") 섹션을 가진 레이아웃을 가지고 있으며 일부 뷰에이 섹션에 포함해야 할 번들이 있습니다. 나는보기에서 이것을 수행하는 것이 효과가있을 것이라고 생각했지만 스크립트를 렌더링하지는 않는다.스크립트 섹션에 스크립트 번들을 포함하는 방법

@section scripts { 
    @Scripts.Render("~/bundles/myBundle") 
} 

제 생각에는 스크립트 섹션에 번들을 어떻게 포함시킬 수 있습니까?

레이아웃

@Scripts.Render("~/bundles/jquery", "~/bundles/scripts") 
@RenderSection("scripts", required: false) 

보기

@section scripts { 
    @Scripts.Render("~/bundles/movie") 
} 
+1

이것은 확실히 작동하며 지원됩니다. 번들 이름의 오타가 있는지 확인합니다 (예 : 'BundleConfig'에서'~/scripts/movie'가 아닌'~/bundles/movie'를 확인하십시오. – Mrchief

+0

나는 믿을 수 없을 정도로 늦었다. 그러나 분명히 VS2015에서도 이런 일이 일어날 수있다. 코드가 맞았지만 제대로 렌더링하려면 VS를 다시 시작해야했습니다. – Lathejockey81

답변

13

왜 번들로 rendersection 혼합? 번들링 경로를 줄이려면 스크립트를 .JS 파일에 넣고 원한다면 자체 번들에 넣고보기에서 해당 번들을 호출하면됩니다.

 bundles.Add(new ScriptBundle("~/bundles/myscripts").Include(
        "~/Scripts/myscript1.js", 
        "~/Scripts/myscript2.js")); 

은 다음 것입니다 참조하십시오 : 예를 들어

또한
@Scripts.Render("~/bundles/myscripts") 

당신의 Web.config가 컴파일 디버그 거짓 아래와 같이 설정했다 확인 :

<compilation debug="false" />    

는 확인한다 스크립트는 번들되고 축소됩니다.

업데이트가

의 의견과 내 최근의 경험을 바탕으로, 우리가 함께 두 가지를 사용하려는 이유를 알 수 있습니다. 커뮤니티에서 배우는 완벽한 사례! :) 그렇다면 리팩토링을 위해 다시 돌아 오기로 결정한 경우 시작하기 전에 오타가 없는지 확인해야합니다. 그래도 문제가 해결되지 않으면 문제가 무엇인지 알려주세요. 그에 따라 답변을 업데이트하겠습니다. 모두에게 감사드립니다!

+1

레이아웃에서 jquery 번들 뒤에로드하려면 번들이 필요합니다. 위와 같이 번들을 내보기에서 렌더링하면 jquery 번들 앞에 렌더링됩니다. – bflemi3

+0

일반적으로 jQuery 번들은 페이지의 맨 아래에있는 기본값과 달리 최상위에 놓습니다. 모든 것이 제대로 작동합니다. checkout이 MVC 뮤직 스토어 코드 https://github.com/tekpub/mvcmusic/tree/master/MvcMusicStore – Yogiraj

+4

모든 페이지의 모든 것을 렌더링하지 않을 수도 있습니다. 단면을 제어 할 수 있습니다. 모든 것을 머리 속에 넣는 것은 끔찍한 해결책입니다 (jQuery는 예외 일 수 있음). – Mrchief

35

아래 보기 내부 솔루션을 언급하려고합니다.

보기

@section Scripts{ 
    <script src="@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl("~/bundles/movie")"></script> 
} 
+11

승인 된 대답으로 가져 가십시오. –

+0

이것이 왜 받아 들여지는 대답일까요? 'debug' 플래그를 무시합니다. – Dementic

+1

@Dementic 그 때 당신 자신의 대답을 쓰지 그래? – Sampath

2

난 당신이

@section scripts { 
    @Scripts.Render("~/bundles/movie") 
} 

가 발생하는 문제를 복제 할 수 없습니다 내가 당신의 경로 다른 한편으로

을 @Mrchref에 동의하고 다시 방문 할 없는 문제를 잘 렌더링 (및 디버그 플래그를 존중)

public static class Helpers 
{ 
    public static HtmlString StaticContent(this System.Web.Mvc.UrlHelper url, string contentPath) 
    { 
     return new HtmlString(System.Web.Optimization.Scripts.Render(contentPath).ToString()); 
    } 
} 

사용법 :

손은, 다음과 같이 사용할 수 있습니다
@section Scripts{ 
    @Url.StaticContent("~/assets/js/jquery") 
} 

System.Web.Optimization.Scripts.Render(contentPath).ToString()에 대한 다른 해결책은 기본적으로 사용중인 동일한 기능을 렌더링하므로 작동하지 않는 것이 좋습니다.

System.Web.Optimization.BundleTable.Bundles으로 놀고 두 버전을 모두 쿼리하고 디버그 플래그를 확인하고 올바른 콘텐츠를 제공 할 수 있는지 확인하십시오.

1

새로운 빌드가 문제를 해결할 것으로 믿습니다. 이 단계를하지 않을 경우 따르십시오

  • 단계 1 :view/layout

    @Scripts.Render("~/bundles/common")

    이 줄을 추가 :BundleConfig.cs

    bundles.Add(new ScriptBundle("~/bundles/common").Include("~/Scripts/common.js"));

  • 2 단계로이 추가

  • 3 단계 : 프로젝트를 빌드하고 실행하십시오.

관련 문제