2012-07-27 11 views
11

मैं NancyContext की संपत्ति तक पहुंचने का प्रयास कर रहा हूं। मैं इसे रेजर व्यू के एचटीएमएल के भीतर से कैसे करूं?मैं रेज़र दृश्य के भीतर से नैन्सी की CurrentUser संपत्ति का उपयोग कैसे करूं?

यदि संभव हो तो मैं कोड स्निपेट के लिए आभारी रहूंगा।

धन्यवाद

संपादित

मैं अब विस्तार Nancy.ViewEngines.Razor.HtmlHelpers मुझे वाक्यात्मक चीनी उस दृश्य कोड संक्षिप्त और पठनीय रहता है के साथ पार दृश्य डेटा देने के लिए।

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; 
} 

और एक दृश्य से कुछ उस्तरा कोड:

यहाँ कुछ उदाहरण हैं। यहां मैं केवल साइन इन पॉपअप (फाउंडेशन प्रकटीकरण) के लिए एचटीएमएल शामिल करने का निर्णय ले रहा हूं, यदि उपयोगकर्ता वर्तमान में प्रमाणीकृत नहीं है - समझ में आता है।

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

किसी भी कारण का उपयोग करते समय डाल नहीं समान कर सकते हैं यह मॉडल पर? – JefClaes

+1

हां। CurrentUser जानकारी का उपयोग कई विचारों में किया जाता है, लेकिन सभी नहीं। इसलिए प्रत्येक प्रत्येक दृश्य के लिए मॉडल सेट अप करना याद रखने के बजाय इसे एक पुन: प्रयोज्य स्थान पर केंद्रीकृत करना आसान है। मुझे Razor.HtmlHelpers एक्सटेंशन विधियों – biofractal

उत्तर

11

आप Html संपत्ति के RenderContext संपत्ति के माध्यम से NancyContext पहुँच सकते हैं।

एक नमूना उपयोग:

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

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

हालांकि अपने SuperSimpleViewEngine (धन्यवाद @Sean टिप्पणी) का उपयोग कर रहे हैं तो आप

@Context.CurrentUser.UserName 
+1

के माध्यम से क्रॉस-व्यू डेटा प्रदान करने के लिए कहीं अधिक सुविधाजनक लगता है। मुझे यह एक रेजर व्यू इंजन के भीतर संदर्भ के बारे में पता है। लेकिन यदि कोई भी, खुद की तरह, इस पोस्ट पर ठोकर खा रहा है, जबकि डिफ़ॉल्ट SuperSimpleViewEngine के भीतर इसे कैसे किया जाए, इस पर उत्तर देने के लिए, आप '@ Context' टोकन का उपयोग करके ऐसा ही कर सकते हैं। जैसे '@ Context.CurrentUser.UserName' – ctrlplusb

संबंधित मुद्दे