2010-11-02 37 views
151

Tôi đang sử dụng _viewstart.cshtml to automagically assign the same Razor Layout cho chế độ xem của mình.Cách đúng để sử dụng chế độ xem _viewstart.cshtml và một phần Dao cạo?

Đó là một tập tin đơn giản chết trong thư mục gốc của thư mục xem tôi trông như thế này:

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

Đây là DRY hơn thêm chỉ thị @Layout cho mọi cái nhìn duy nhất.

Tuy nhiên, điều này đặt ra một vấn đề đối với chế độ xem một phần, vì chúng chạy nội dung của _viewstart.cshtml và do đó gán chính xác bố cục, làm cho chúng, um, không còn một phần.

Đây là một dự án giả định, hiển thị tệp _viewstart.cshtml, tệp _layout.shtml được chia sẻ và chế độ xem một phần ("AnonBar.cshtml").

Example project structure

Hiện nay, cách mà tôi nhận được khoảng này là bằng cách thêm dòng sau vào mỗi lần xem một phần:

@{ 
    Layout = ""; 
} 

Điều này có vẻ như một cách sai lầm để biểu thị một cái nhìn như một một phần trong Razor. (Lưu ý rằng không giống như các hình thức web xem động cơ, phần mở rộng tập tin là như nhau cho quang cảnh một phần.)

Các tùy chọn khác tôi coi nhưng điều đó thậm chí còn tồi tệ hơn:

  • Đưa tất cả quang cảnh một phần vào một thư mục chung, để họ có thể chia sẻ một _viewstart.cshtml phổ biến. Điều này phá vỡ quy ước của các khung nhìn nằm trong cùng thư mục với bộ điều khiển của chúng.
  • Không sử dụng chế độ xem một phần.

Đây có phải là cái gì đó vẫn đang bị thịt ra bởi nhóm động cơ xem Razor hay tôi thiếu khái niệm cơ bản?

+3

Xin lỗi vì ngoại tuyến, nhưng các biểu tượng bên cạnh tên tệp là gì? :) Một số loại quyền kiểm soát quyền? – Alex

+6

@jitbit: VisualSVN – erict

Trả lời

232

Nếu bạn return PartialView() từ bộ điều khiển của mình (thay vì return View()), thì _viewstart.cshtml sẽ không được thực thi.

+6

Aha, không biết về lớp 'PartialViewResult'. Đó là những gì tôi cần. – Portman

+6

Theo dõi, tôi thấy rằng tôi cần ** cũng ** đặt rõ ràng kiểu trả về của phương thức hành động thành 'PartialViewResult' thay cho' ActionResult' thông thường. – Portman

+2

@Portman bạn có thấy vấn đề khi kiểu trả về của phương thức hành động không phải là 'ActionResult'? Tôi ngạc nhiên rằng đây là một vấn đề vì thời gian chạy MVC sẽ không hoạt động khác trong trường hợp này (tức là miễn là kiểu được trả về bởi phương thức hành động là 'ActionResult' hoặc bất kỳ lớp nào có nguồn gốc từ nó chỉ hoạt động). – marcind

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