सभी MVC noobs के शुरू में 'एम' शब्द से बचने, लेकिन यह थोड़े MVC परिवर्णी शब्द के आरंभ में शुरू करता है। तो शायद, शायद हो सकता है, आप मॉडल के साथ अपना समाधान शुरू करना चाहें ... बस कह रहे हैं।
अपने आप को दोहराएं (डीआरवाई)। आप प्रत्येक नए नियंत्रक को "नया पेजडाटा()" प्रतिलिपि बनाने और चिपकाने जा रहे हैं जो एक दृश्य में विकल्प सूची पास करता है। फिर आप एक विकल्प को हटाना या जोड़ना चाहते हैं और प्रत्येक नियंत्रक के पेजडेटा को संपादित करना होगा।
इसके अलावा, आप कम से कम अनावश्यक वर्बोज़ "एड", "नया", "आईएस" और "नाम" के साथ कम से कम कोड टाइप करना चाहते हैं। चूंकि आपके पास चुनिंदा विकल्प (और/या एक रेडियो बटन सूची) में केवल एक महत्वपूर्ण मूल्य जोड़ी है, इसलिए संभवत: सबसे हल्की डेटा संरचना का उपयोग करें, यानी आपका मॉडल - एक मॉडल।
फिर बस नियंत्रक में मॉडल का संदर्भ लें और एक ड्रॉपडाउन लिस्टफ़ोर का उपयोग करके व्यू में एक चयन सूची में शब्दकोश को कनवर्ट करें जिसमें LINQ Lambda अभिव्यक्ति है।
भयभीत? तुम अकेले नहीं हो। मैं निश्चित रूप से था। MVC के
मॉडल हिस्सा:
using System.Web.Security;
using System.Collections.Generic;
using System.Text;
using System.Linq.Expressions;
using System.Web.Routing;
using System.Web.Helpers;
using System.Web.Mvc.Html;
using MvcHtmlHelpers;
using System.Linq;
// EzPL8.com is the company I work for, hence the namespace root.
// EzPL8 increases the brainwidths of waiters and bartenders by augmenting their "memories" with the identifies of customers by name and their food and drink preferences.
// This is pedagogical example of generating a select option display for a customer's egg preference.
namespace EzPL8.Models
{
public class MyEggs
{
public Dictionary<int, string> Egg { get; set; }
public MyEggs() //constructor
{
Egg = new Dictionary<int, string>()
{
{ 0, "No Preference"}, //show the complete egg menu to customers
{ 1, "I hate eggs"}, //Either offer an alternative to eggs or don't show eggs on a customer's personalized dynamically generated menu
//confirm with the customer if they want their eggs cooked their usual preferred way, i.e.
{ 2, "Over Easy"},
{ 3, "Sunny Side Up"},
{ 4, "Scrambled"},
{ 5, "Hard Boiled"},
{ 6, "Eggs Benedict"}
};
}
}
नियंत्रक अब काफी सरल है, बस मॉडल गुजर यहाँ एक उदाहरण मैं अपने आप को एम, वी, और सी को पढ़ाने के लिए प्रयोग किया जाता है। यह एक अलग अवधारणा बनाने से बचाता है, जो शायद केवल एक पृष्ठ के लिए अलग नहीं है।:
public ActionResult Index()
{
var model = new EzPL8.Models.MyEggs();
return View(model);
}
देखें DropDownListFor (बजाय DropDownList) का उपयोग करता है और घटना रिफैक्टरिंग में मजबूत टाइपिंग के लिए एक लैम्ब्डा अभिव्यक्ति की जरूरत है:
@Html.DropDownListFor(m => m.Egg, new SelectList(Model.Egg, "Key", "Value"))
Voilà, जिसके परिणामस्वरूप HTML:
<select id="Egg" name="Egg">
<option value="0">No Preference</option>
<option value="1">I hate eggs</option>
<option value="2">Over Easy</option>
<option value="3">Sunny Side Up</option>
<option value="4">Scrambled</option>
<option value="5">Hard Boiled</option>
<option value="6">Eggs Benedict</option>
</select>
नोट: <option value="6">
में VALUE द्वारा भ्रमित न हों, जो कि चयनसूची() में "मान" से शब्दकोश से कुंजी है, जो टेक्स्ट/शीर्षक (जैसे अंडे बेनेडिक्ट) टी है टोपी विकल्प टैग के बीच समाप्त होता है।
प्रयोग करें प्रकरण: यातायात आवेदन और डेटाबेस के बीच मैं एक स्थिर सूची बनाई सूची है कि शायद ही कभी, अगर कभी बदलता है ड्रॉप डाउन के लिए एक डेटाबेस क्वेरी से बचने के लिए कम करने के लिए। हालांकि, परिवर्तन अनिवार्य है और अब से छह महीने पहले मेरे ग्राहक के रेस्तरां में एक डाइनर मर जाता है; हरी हैम की वजह से नहीं, बल्कि इसलिए कि वे अंडे के लिए एलर्जी थे और पकाने के लिए कुछ अपने waffles के साथ मिलाया।
रेस्तरां को तत्काल खाद्य एलर्जी शामिल करने के लिए अपडेट की गई अपनी ग्राहक जानकारी की आवश्यकता है। जबकि वे ग्राहकों को दोहराना पसंद करते हैं, वे मृत ग्राहकों के साथ वापस आने वाले लाश के रूप में वापस नहीं आते हैं जिनके पास भुगतान करने का कोई तरीका नहीं है क्योंकि उनके क्रेडिट कार्ड रद्द कर दिए गए थे।
उदारवादी प्रश्न: क्या मुझे ग्राहक नियंत्रक से संबंधित सभी नियंत्रकों और विचारों को संशोधित करना चाहिए? या बस मॉडल में {7, "एलर्जी से अंडे"} डालें?
एक अन्य अशिष्ट प्रश्न: अंडे नहीं हैं? क्या आप मॉडल में एक बार {8, "ओमेलेट, वेस्टर्न"}, {9, "ओमेलेट, मशरूम-फेटा-स्पिनैच"} जोड़ना चाहते हैं और नए जोड़ों को स्वचालित रूप से उन सभी विचारों में सभी ड्रॉपडाउन सूचियों में प्रचारित करना है जो उनका उपयोग करते हैं ?
1. * में एक मॉडल एम * कुलपति का उपयोग करें:
नीचे लाइन (रों) यह शायद रास्ता से अधिक आप, के लिए कहा ... लेकिन आप MVC, बस नहीं कुलपति ने क्या कहा है। 2. मॉडल में एक शब्दकोश का प्रयोग करें जब एक चयन सूची "प्राथमिक कुंजी" और शीर्षक से अधिक कुछ भी नहीं हो। 3. यदि आपकी स्थैतिक सूची डेटाबेस लुकअप तालिका के साथ कहीं भी नहीं है, तो आपका ऐप शायद बहुत उपयोगी नहीं है। जब आप स्थिर सूची में कोई विकल्प जोड़ते हैं, तो संभावना से अधिक आपको डेटाबेस में अन्य तालिकाओं के साथ प्राथमिक कुंजी/विदेशी कुंजी संबंध अखंडता त्रुटि से बचने के लिए लुकअप तालिका में एक सम्मिलन करने की भी आवश्यकता होगी। 4. त्रुटियों से बचने के लिए लैम्ब्डा और दृढ़ता से टाइप की गई डेटा संरचनाओं का उपयोग करें और टाइपहेड समर्थन प्राप्त करें।
मैंने अपना जवाब चुना है क्योंकि यह वह है जिसे मैंने साथ किया था। – GONeale
यह ठीक काम करता है, लेकिन अगर मैं स्टार्टअप मान के रूप में दशमलव को लोड करने के लिए ड्रॉपडाउन चाहता हूं, तो मुझे क्या करना चाहिए? – Sakthivel