2012-07-27 8 views
11

Tôi đang cố truy cập thuộc tính CurrentUser của số NancyContext. Làm cách nào để làm điều này từ bên trong html của chế độ xem Dao cạo?Làm cách nào để truy cập thuộc tính CurrentUser của Nancy từ trong chế độ xem Dao cạo?

Tôi sẽ biết ơn một đoạn mã nếu có thể.

Cảm ơn

Sửa

bây giờ tôi mở rộng Nancy.ViewEngines.Razor.HtmlHelpers để cho tôi qua xem dữ liệu với đường cú pháp mà giữ ngắn gọn xem mã và có thể đọc được.

Dưới đây là một vài ví dụ:

public static bool IsRegistered<T>(this HtmlHelpers<T> html) 
{ 
    var user = GetUser(html); 
    return user != null && user.IsRegistered; 
} 

public static bool IsAuthenticated<T>(this HtmlHelpers<T> html) 
{ 
    return GetUser(html) != null; 
} 

public static User GetUser<T>(this HtmlHelpers<T> html) 
{ 
    return (User)html.RenderContext.Context.CurrentUser; 
} 

Và một số mã như dao cạo từ một cái nhìn. Ở đây tôi quyết định bao gồm html cho cửa sổ bật lên Đăng nhập (Foundation Reveal) chỉ khi người dùng hiện không được xác thực - có ý nghĩa.

@if (!Html.IsAuthenticated()) 
{ 
    Html.Partial("Reveals/SignInReveal"); 
} 
+0

Bất kỳ lý do tại sao bạn không đặt nó trên mô hình? – JefClaes

+1

Có. Thông tin CurrentUser được sử dụng trên nhiều chế độ xem, nhưng không phải tất cả. Vì vậy, dễ dàng tập trung điều này ở một nơi có thể sử dụng lại thay vì phải nhớ thiết lập mô hình cho từng chế độ xem. Tôi tìm thấy nó thuận tiện hơn nhiều để cung cấp dữ liệu xem chéo thông qua các phương pháp mở rộng Razor.HtmlHelpers – biofractal

Trả lời

11

Bạn có thể truy cập thông qua NancyContext tài sản RenderContext các Html tài sản của.

Cách sử dụng mẫu:

@inherits Nancy.ViewEngines.Razor.NancyRazorViewBase<dynamic> 

<p>Current User: @Html.RenderContext.Context.CurrentUser </p> 

Tuy nhiên nếu bạn đang sử dụng SuperSimpleViewEngine (nhờ những nhận xét để @Sean) sau đó bạn có thể làm tương tự bằng cách sử dụng

@Context.CurrentUser.UserName 
+1

Tôi biết điều này về Ngữ cảnh bên trong một công cụ xem Dao cạo. Nhưng nếu bất cứ ai, giống như bản thân mình, tình cờ gặp bài đăng này trong khi tìm kiếm câu trả lời về cách thực hiện điều này trong SuperSimpleViewEngine mặc định, bạn có thể làm tương tự bằng cách sử dụng mã thông báo '@ Context'. ví dụ. '@ Context.CurrentUser.UserName' – ctrlplusb