2011-03-05 8 views
10

हमें हमारी लेआउट फ़ाइल में पारित गतिशील डेटा की आवश्यकता है, इससे कोई फर्क नहीं पड़ता कि बच्चा क्या है। उदाहरण के लिए, हम लेआउट के शीर्षलेख में कुछ उपयोगकर्ता विशिष्ट डेटा प्रदर्शित करते हैं।एएसपी.नेट एमवीसी 3 लेआउट सभी बच्चे के दृश्यों में व्यूबैग डेटा

हम इस डेटा को लेआउट व्यू में कैसे पारित कर सकते हैं बिना प्रत्येक कार्रवाई को स्वतंत्र रूप से आपूर्ति करने के लिए? क्या हमें कस्टम नियंत्रक का उपयोग करना चाहिए, या क्या कोई बेहतर समाधान है?

+0

साथ अद्यतन कर सकते हैं, यहाँ एक ब्लॉग मैं बहुत पहले दिखा एक अनूठा तरीका नहीं लिखा है: http://crazorsharp.blogspot.com /2011/03/master-page-model-in-aspnet-mvc-3-using.html – BFree

उत्तर

9

रणनीति मैं का उपयोग करें कि जहाँ से मेरे विचार के सभी मॉडल निकाले जाते हैं एक आधार दृश्य मॉडल है। मैं बेस नियंत्रक का उपयोग करता हूं, हालांकि आप वैश्विक फ़िल्टर का भी उपयोग कर सकते हैं, और ऑनएक्शन एक्स्क्टेडड ओवरराइड कर सकते हैं। जब मैं एक दृश्य का पता लगाता हूं जो ViewResult देता है, तो मैंने मॉडल को अपने मूल दृश्य मॉडल में डाला और बेस नियंत्रक से मॉडल पर सामान्य गुण सेट किए।

वैश्विक फ़िल्टर और आधार नियंत्रक के बीच की पसंद विभिन्न कारकों पर निर्भर करती है। यदि यह वास्तव में सभी कार्यों पर लागू होता है (जो दृश्य परिणाम लौटाते हैं) और आपको कुछ संसाधनों तक पहुंच प्राप्त करने के लिए इंजेक्शन की आवश्यकता नहीं है, तो शायद मैं फ़िल्टर के साथ जाऊंगा। यदि आपको निर्भरता इंजेक्शन की आवश्यकता है या आपके पास कुछ नियंत्रक हैं जहां डेटा लागू किया जाएगा और अन्य जहां यह नहीं होगा (व्यवस्थापक नियंत्रक कहें), तो मैं आधार नियंत्रक मार्ग पर जाऊंगा। यदि आप इसके साथ जाते हैं तो आपको नियंत्रक से प्राप्त करने की आवश्यकता होगी।

यदि आप एक सामान्य दृश्य मॉडल से प्राप्त नहीं करना चाहते हैं तो आप व्यूबैग के साथ भी वही काम कर सकते हैं। मुझे दृढ़ता से टाइप मॉडल पसंद है, लेकिन वाईएमएमवी।

+0

क्या आप कोड को कोई लिंक प्रदान कर सकते हैं जो यह करता है? मैं इसके लिए बहुत नया हूं और यह आपके उत्तर को समझता हूं लेकिन इसे लागू करने के संकेत के बिना। –

2

रेजर प्रोजेक्ट में मानक लॉगिन नियंत्रणों पर नज़र डालें - ये आंशिक विचार उपयोगकर्ता डेटा तक पहुंचते हैं - संभवतः आप जैसे चाहें।

उदा एक ठेठ LogonPartial.cshtml शामिल हो सकता है:

@if(Request.IsAuthenticated) { 
    <text>Welcome <b>@Context.User.Identity.Name</b>! 
    [ @Html.ActionLink("Log Off", "LogOff", "Account") ]</text> 
} 
else { 
    @:[ @Html.ActionLink("Log On", "LogOn", "Account") ] 
} 
+1

क्या होगा यदि हमें गैर-उपयोगकर्ता डेटा तक पहुंचना था जो संदर्भ से डिफ़ॉल्ट रूप से उपलब्ध नहीं होगा? –

1

मेरा मानना ​​है कि अपनी चिंताओं को कोर सबसे अच्छा धारा का उपयोग करके ऐसा दिखाई देगा:

यहाँ इस बारे में लेख है।

http://weblogs.asp.net/scottgu/archive/2010/12/30/asp-net-mvc-3-layouts-and-sections-with-razor.aspx

आप वर्गों को परिभाषित करने और फिर तुम आईओसी उपयोग कर रहे हैं उन्हें

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