मैं एक बहुत ही सरल अवधारणा के साथ संघर्ष कर रहा हूं। अगर मेरे पास मेरे _Layout.cshtml द्वारा उपयोग के लिए व्यूबैग में कोई मान है, तो मैं उस मान को कैसे और कहां सेट करूं?एएसपी.नेट एमवीसी 3 विचारों में सामान्य डेटा को संभालने के दृष्टिकोण दृष्टिकोण
यहाँ सबसे स्पष्ट (मेरे लिए) विकल्प हैं के रूप में मैं वर्तमान में उन्हें देखें:
- प्रत्येक नियंत्रक (सूखी नहीं)
- मेरे अपने नियंत्रक नियंत्रक से इनहेरिट आधार बना सकते हैं और सेट में मान सेट करें आधार वर्ग
- Global.asax.cs में मान सेट में मूल्य (गंदा लगता है)
- डेटा सेट और विश्व स्तर पर फिल्टर रजिस्टर करने के लिए एक ActionFilter बनाएं (यह भी गलत लगता है)
- में मान सेट करें _ViewStart.cshtml उदाहरण के लिए
(बहुत गलत और बहुत गंदा लगता है):
_Layout.cshtml
<!DOCTYPE html>
<html>
<head runat="server">
<title>@ViewBag.Title</title>
</head>
<body>
<div id="header">
<h1>Welcome @ViewBag.UserName</h2>
</div>
<div id="content">
@RenderBody()
</div>
</body>
</html>
प्रत्येक नियंत्रक उपयोगकर्ता नाम मूल्य सेट करते हैं, तो यह है कि बहुत नहीं है सूखी। अगर मैं कोडइग्निटर जैसे कुछ के साथ इसका सामना कर रहा था, तो मैं इन सामान्य वस्तुओं को संभालने के लिए अपना खुद का बेस कंट्रोलर बनाउंगा और अपने मजेदार तरीके से जाऊंगा। क्या एएसपी.नेट एमवीसी 3 के साथ एक और पसंदीदा विकल्प है?
वास्तव में, इस विशेष परिदृश्य में - मुझे लगता है कि "उपयोगकर्ता नाम" वास्तव में सत्र/फॉर्म ऑथ टिकट से आएगा। तो हो सकता है कि आप एक HTML सहायक का उपयोग करना चाहें जो कुकी के उपयोगकर्ता नाम को पकड़ने के लिए FormsAuth कोड का उपयोग करता है और एक MvcHtmlString प्रस्तुत करता है - बस एक विचार ... – RPM1984
हमम ... अच्छा बिंदु। शायद @ ViewBag.UserName सबसे अच्छा उदाहरण नहीं है। हालांकि, मैं इस समय बड़ी तस्वीर के साथ वास्तव में अधिक चिंतित हूं। – Greg
@ आरपीएम 1 9 84: यह इस बात से कोई फर्क नहीं पड़ता कि "उपयोगकर्ता नाम" फ़ॉर्म ऑथ से आया है। इसे (व्यूबैग या अन्यथा) में पारित किया जाना चाहिए। दृश्य को कुछ भी "लाने" नहीं देना चाहिए। परीक्षण परिदृश्यों पर भी विचार करें, आप नकली डेटा को इकाई परीक्षण में देखने के लिए पास करना चाहते हैं। यदि आपका विचार "fetching" चीजें हैं तो संभव नहीं है। एमवीसी पैटर्न के पूरे बिंदु को भी काफी हद तक अमान्य कर दिया गया है। आपको चुनने पर नहीं, लेकिन मैंने इस प्रकार की मानसिकता को विभिन्न एमवीसी लेखों (डिफ़ॉल्ट एमवीसी परियोजना टेम्पलेट सहित) में दोहराया है। – Roger