2012-06-26 33 views
5

Mã của tôi biên dịch và chạy mà không có lỗi; tuy nhiên, nó không hiển thị như tôi mong đợi.Hiển thị tất cả mã Javascript trong một phần bằng cách sử dụng bố trí lồng nhau

Lý thuyết:

Tôi muốn sử dụng nhiều trang bố trí.

Bố cục "cơ sở" chỉ nên bao gồm các tệp kiểu và tệp javascript đang được giải pháp sử dụng.

Bố cục khác phải có nội dung html hoặc trình bao bọc. Cách bố trí này dường như không cần thiết, nhưng cấp trên của tôi đảm bảo với tôi nó sẽ dẫn đến sự vĩ đại trong tương lai. Chẳng hạn như có nhiều tiêu đề hoặc khả năng không có đầu trang hoặc chân trang trên một số trang nhất định. Những điều chính là để có nhiều ContentLayouts nhưng một baselayout chung

Bộ luật:

_BaseLayout

<html> 
    <head> 
     <link href="@Url.Content("~/Content/css/main.css")" rel="stylesheet" type="text/css" /> 
     <script type="text/javascript" src="@Url.Content("~/Scripts/common.js")"></script> 
     @RenderSection("JavaScript", false) 
     @RenderSection("Css", false) 
    </head> 
    <body> 
     @RenderBody() 
    </body> 
</html> 

_ContentLayout

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

@RenderSection("JavaScript", false) 
@RenderSection("Css", false) 

<div class="page"> 
    <section class="wrapper"> 
     @RenderBody() 
    </section> 
</div> 

View.cshtml

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

@section JavaScript 
{ 
     <script type="text/javascript"> 
    (function ($) { 
     $(function() { 
      //do stuff; 
     }); 
    } (jQuery)); 
</script> 
} 

<div> 
     //html content 
</div> 

Như tôi đã nói trước đó, tác phẩm này. Vấn đề là khi tôi xem nguồn trang, tập lệnh từ khung nhìn được hiển thị trong _ContentLayout và do đó nằm ngoài vùng kịch bản được chỉ định. Tôi có thể "đá" mã kịch bản vào bố cục tiếp theo không? Điều này sẽ cho phép tất cả các mã kịch bản được trong cùng một khu vực.

Trả lời

6

Bạn nên phát triển chế độ xem theo hành vi @RenderSection().

Mỗi @RenderSection() biểu thị hậu duệ của nó @section SectionName { }. Vì vậy, bạn cần thay đổi Chế độ xem theo thứ tự này:

_BaseLayout.cshtml - Vẫn giữ nguyên.

_ContentLayout.cshtml:

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

@section JavaScript { 
    @RenderSection("JavaScriptToHead", false) 
} 

@section Css { 
    @RenderSection("CssToHead", false) 
} 

<div class="page"> 
    <section class="wrapper"> 
     @RenderBody() 
    </section> 

và cuối cùng View.cshtml:

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

@section JavaScriptToHead { 
    //JS stuff 
} 

@section CssToHead { 
    //Css stuff 
} 

<div> 
    //html content 
</div> 
Các vấn đề liên quan