2012-05-05 32 views
8

thứ bậc quan điểm Given: Index.cshtml -> _Layout.cshtml -> _MasterLayout.cshtml:MVC: Cách sử dụng (kết xuất) các phần từ chế độ xem gốc (chế độ xem chính)?

_MasterLayout.cshtml - các bộ phận mà tôi muốn sử dụng trong cách bố trí tổng thể (dưới đây)

@section javascriptLinks { 
<script src="~/client/vendor/require-jquery.js" data-main="~/client/main.js" type="text/javascript"></script> 
} 
@RenderBody() 

_Layout.cshtml - trang web thực tế tổng thể bố trí

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

<!doctype html> 
<html> 
<!-- actual site layout here --> 
<body> 
@RenderBody() 
@RenderSection("javascriptLinks") 
</body> 
</html> 

Index.cshtml - một số đánh dấu trang cụ thể cụ thể

Ý tưởng tách _Layout.cshtml và _MasterLayout.cshtml là chia sẻ mã. Tôi có một loại thư viện/khung và _MasterLayout thuộc về thư viện này. Và _Layout.cshtml là bố cục chính của trang ứng dụng cụ thể.

Thật không may, lược đồ này không hoạt động. Trong khi hiển thị _Layout.cshtml sẽ không thấy các phần từ _MasterLayout.cshtml.

Có cách nào để sử dụng các mục trong trường hợp này (lấy chúng từ chế độ xem gốc không phải từ chế độ xem con) không?

Một giải pháp có thể tôi có thể thấy là tạo các trang riêng biệt cho từng phần trong _MasterLayout.cshtml và gọi @RenderPage trong _Layout. Nhưng, tôi muốn có một tài sản chia sẻ duy nhất (_MasterLayout.cshtml).

Trả lời

4

Cố gắng đảo ngược thao tác. Ý tôi là như thế này:

bạn _MasterLayout.cshtml:

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8" /> 
    @RenderSection("HeadSection", true) 
    <title>@ViewBag.Title</title> 
</head> 
<body> 
@RenderBody() 

// ...... 
// You could put your general scripts here 
<script src="~/client/vendor/require-jquery.js" data-main="~/client/main.js" type="text/javascript"></script> 
// Put true to enforce the sub layout to define Scripts section 
    @RenderSection("Scripts", true) 
</body> 
</html> 

bạn _Layout.cshtml:

@{ Layout = "~/Views/_Shared/_LayoutMain.cshtml"; } 
@section HeadSection{ 
    // any thing you want 
    @RenderSection("HeadSection", false) 
} 
    @RenderBody() 
// ...... 
// Put false to make Scripts section optional 
@section Scripts{ 
    @RenderSection("Scripts", false) 
} 
+0

này có ý nghĩa thực sự nhưng _Layout.cshtml trở nên không tự nhiên (thay vì đánh dấu html nó phải chứa tập hợp các khai báo @section). Tôi muốn _Layout.cshtml chứa toàn bộ bố cục trang và chỉ nhập các phần "chuẩn" (tức là các phần) từ một số nguồn (dễ dàng chia sẻ). – Shrike

Các vấn đề liên quan