2012-10-15 21 views
10

Tôi chỉ bắt tay với Nancy, sử dụng bản dựng hiện tại trên Nuget, v0.12.1.0 và tôi muốn sử dụng công cụ xem Dao cạo.Có hỗ trợ Nancy.ViewEngines.Razor v0.12.1.0 Giao diện bố cục amd _ViewStart không?

V0.12.1.0 của công cụ xem Dao cạo có hỗ trợ Giao diện và _ViewStart không?

ví dụ:

Tôi đã sau trong ~/Views/_ViewStart.cshtml

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

và sau đây trong ~/Views/Shared/_Layout.cshtml

@inherits Nancy.ViewEngines.Razor.NancyRazorViewBase<dynamic> 
<!DOCTYPE html> 
<html> 
<head> 
    @RenderSection("head", false) 
</head> 
<body> 
    @RenderBody() 
</body> 
</html> 

Nhưng tất cả tôi nhận được khi tôi nhấn trang chủ là nội dung của một cái nhìn tôi đã thiết trong ~/Views/Home/Index.cshtml

<h1>Home</h1> 

Mô đun trang chủ của tôi trông giống như e này:

public class Home : NancyModule 
{ 
    public Home() 
     : base("") 
    { 
     Get["/"] = _ => View["Index"]; 
    } 
} 

Trả lời

8

_ViewStart không phải là một cái gì đó chúng tôi (hiện tại) hỗ trợ, nhưng Layout chắc chắn được hỗ trợ trên cơ sở per-view

+8

_ViewStart hiện đang hỗ trợ – TheCodeJunkie

+0

Hallelujah: D: D – nathanchere

2

Từ những gì tôi có thể nói, câu trả lời đơn giản là không.

Câu trả lời chi tiết hơn, từ nghiên cứu hạn chế mà tôi đã làm.

Trong MVC 2, Microsoft đã thêm tệp System.Web.Razor chứa trình phân tích cú pháp và trình tạo mã Razor. Tính năng _ViewStart đã được thêm vào trong MVC 3 và trong phiên bản đó, Microsoft đã không tạo một tệp System.Web.Razor mới. Thay vào đó, họ đã nhúng trình phân tích cú pháp và trình tạo mã mới vào dll System.Web.Mvc mới trong không gian tên System.Web.Mvc.Razor. Tôi không chắc chắn lý do đằng sau sự thay đổi này, có thể đơn giản hóa việc triển khai.

Chế độ xem Nancy Razor tham chiếu trình phân tích cú pháp và trình tạo mã ban đầu và do đó sẽ không thể truy cập bất kỳ chức năng mới nào của Razor trong MVC 3. Tôi chưa từng thảo luận với các chàng trai NancyFx và didn ' t thấy (sau khi tìm kiếm nhanh) bất kỳ vấn đề nào trên GitHub hoặc các cuộc thảo luận trong nhóm google, vì vậy tôi không biết liệu họ có dự định thay đổi viewengine hay không.

29

Tính đến Nancy v0.20 file _ViewStart hiện đang hỗ trợ.

Như một mẹo, khi tham chiếu tệp bố cục của bạn, đừng đặt tiền tố vị trí wtih ~/. Chỉ cần có những điều sau đây hoặc bạn sẽ nhận được ngoại lệ tham chiếu null.

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

này là gọn gàng man – misaxi

+0

này không xuất hiện để làm việc khi sử dụng xem như nguồn lực nhúng – Maciek

+1

Hy vọng rằng tôi chỉ không nhìn thấy nó, nhưng điều này thực sự phải ở trong các tài liệu cho Nancy! Tôi đã vật lộn với điều này trong một vài giờ mà không có một đầu mối tại sao đường dẫn bố cục của tôi không hoạt động khi trang web của tôi được triển khai. –

2

Tôi muốn thêm vào câu trả lời vì tôi đã mất khoảng một ngày cố gắng tìm ra câu trả lời này:.

Nancy.RequestExecutionException: Oh noes! ---> System.NullReferenceException: Object reference not set to an instance of an object. 
    at Nancy.ViewEngines.DefaultViewCache.GetOrAdd[TCompiledView](ViewLocationResult viewLocationResult, Func`2 valueFactory) 
    at Nancy.ViewEngines.Razor.RazorViewEngine.GetOrCompileView(ViewLocationResult viewLocationResult, IRenderContext renderContext, Assembly referencingAssembly, Type passedModelType) 
    at System.Dynamic.UpdateDelegates.UpdateAndExecute5[T0,T1,T2,T3,T4,TRet](CallSite site, T0 arg0, T1 arg1, T2 arg2, T3 arg3, T4 arg4) 
    at CallSite.Target(Closure , CallSite , RazorViewEngine , ViewLocationResult , IRenderContext , Assembly , Object) 
    at Nancy.ViewEngines.Razor.RazorViewEngine.GetViewInstance(ViewLocationResult viewLocationResult, IRenderContext renderContext, Assembly referencingAssembly, Object model) 
    at System.Dynamic.UpdateDelegates.UpdateAndExecute5[T0,T1,T2,T3,T4,TRet](CallSite site, T0 arg0, T1 arg1, T2 arg2, T3 arg3, T4 arg4) 
    at Nancy.ViewEngines.Razor.RazorViewEngine.<>c__DisplayClass27.b__26(Stream stream) 
    at Nancy.Responses.MaterialisingResponse.PreExecute(NancyContext context) 

Tương tự như câu trả lời Richard ngân hàng của - Nancy không giải quyết được con đường bố trí mặc định trong lần xem/file _ViewStart.cshtml của bạn (ví dụ: ~/Views/Shared/_Layout.cshtml). ~/Không được giải thích trong trình phân giải chế độ xem trong Nancy.

Bạn có thể xóa ~/part hoặc nhận xét bố cục mặc định và chỉ định bố cục theo cách thủ công trên từng chế độ xem của bạn. Lý do tôi làm thứ hai là vì Nancy vẫn thực hiện _Layout.cshtml ngay cả khi bạn đã vô hiệu hóa bố cục trong khung nhìn của bạn.

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