2011-08-29 11 views
5

मैं इकाई की रूपरेखा कोड पहले उपयोग कर रहा हूँ मेरी डेटाबेस उत्पन्न करने के लिए, तो मैं एक वस्तु की तरह परिभाषित किया है निम्नलिखित:रेज़र के साथ एएसपी.नेट एमवीसी 3 का उपयोग करना, दृश्य दृश्य में आईसीओलेक्शन जोड़ने का सबसे प्रभावी तरीका क्या है?

public class Band 
{ 
    public int Id { get; set; } 
    [Required(ErrorMessage = "You must enter a name of this band.")] 
    public string Name { get; set; } 
    // ... 
    public virtual ICollection<Genre> Genres { get; set; } 
} 

अब मैं इस के लिए एक दृश्य बनाने में देख रहा हूँ और डिफ़ॉल्ट मचान नहीं है मेरे रूप में जेनर्स जोड़ना, जो पिछले अनुभव से मैं अपेक्षा करता हूं।

ऑनलाइन देखकर मुझे Using ASP.NET MVC v2 EditorFor and DisplayFor with IEnumerable<T> Generic types मिल गया है जो मुझे जो चाहिए, उसके करीब आता है, लेकिन ASP.NET MVC 3 Custom Display Template With UIHint - For Loop Required? प्रति रेजर और संभवतः एमवीसी 3 के साथ समझ में नहीं आता है।

वर्तमान में मैं अपने बनाने के ध्यान में रखते हुए कि सूची के माध्यम से ViewBag लिए शैलियों की सूची और फिर पाश जोड़ दिया है:

@{ 
    List<Genre> genreList = ViewBag.Genres as List<Genre>; 
} 
// ... 
<ul> 
@for (int i = 0; i < genreList.Count; i++) 
{ 
    <li><input type="checkbox" name="Genres" id="[email protected](i.ToString())" value="@genreList[i].Name" /> @Html.Label("Genre" + i.ToString(), genreList[i].Name)</li> 
} 
</ul> 

अभी तक निपटने नहीं मामलों के बाहर जहां उपयोगकर्ता जावास्क्रिप्ट निष्क्रिय और चेक बॉक्स है फिर से जांच की जरूरत है, और वास्तव में इस जानकारी के साथ डेटाबेस को अद्यतन करने की जरूरत है, यह शैलियों को आउटपुट करता है जैसा मैं चाहूंगा।

लेकिन एमवीसी 3 कितना अच्छा हो गया है, इस पर आधारित यह सही नहीं लगता है।

तो एमवीसी 3 में इसे संभालने का सबसे प्रभावी तरीका क्या है?

उत्तर

5

मैं व्यूबैग के माध्यम से अपने दृश्य में सूचियां नहीं भेजता, इसके बजाय मैं ऐसा करने के लिए अपने व्यूमोडेल का उपयोग करता हूं।

मैं इस तरह एक EditorTemplate है:

@model IceCream.ViewModels.Toppings.ToppingsViewModel 
<div> 
    @Html.HiddenFor(x => x.Id) 
    @Html.TextBoxFor(x =x> x.Name, new { @readonly="readonly"}) 
    @Html.CheckBoxFor(x => x.IsChecked) 
</div> 

जो मैं अपने दृश्य \ कुल्फ़ी \ EditorTemplates फ़ोल्डर में रखा उदाहरण के लिए, मैं कुछ इस तरह से किया था। मैं उपयोगकर्ता को किसी विशेष टॉपिंग को "चेक" करने की अनुमति देने के लिए कुछ HTML प्रदर्शित करने के लिए इसका उपयोग करता हूं।

कुछ इस तरह तो मेरे विचार में मुझे मिल गया है:

@HtmlEditorFor(model => model.Toppings) 

और है कि मेरे EditorTemplate में है कि परिणाम का उपयोग करेगा मेरी viewmodel की टॉपिंग संपत्ति में टॉपिंग से प्रत्येक के लिए इस्तेमाल किया जा रहा।

और फिर मैं एक viewmodel जो अन्य बातों के अलावा, टॉपिंग संग्रह शामिल है:

public IEnumerable<ToppingsViewModel> Toppings { get; set; } 
से अधिक मेरी नियंत्रक में

, अन्य बातों के अलावा, मैं टॉपिंग पुनः प्राप्त (हालांकि मैं में ऐसा कर मेरी मामला) और मेरे व्यूमोडेल की संपत्ति को टॉपिंग के संग्रह में सेट करें। एक संपादन के मामले में, जहां टॉपिंग पहले से चुना गया हो सकता है, मैंने TopingsViewModel के Ischecked सदस्य को सेट किया है और यह चेक किए गए संबंधित चेकबॉक्स सेट करेगा।

इस तरह से ऐसा करने से सही मॉडल बाध्यकारी प्रदान किया गया ताकि जब उपयोगकर्ता ने कुछ टॉपिंग की जांच की, संग्रह में अंतर्निहित आइटम उन चयनों को प्रतिबिंबित करते हैं। मेरे लिए अच्छा काम किया, उम्मीद है कि यह आपके लिए उपयोगी है।

+0

क्षमा करें, अभी भी इसे वास्तव में लागू करने के लिए समय खोजने का प्रयास कर रहा है। लेकिन यह आपके प्रश्न http://stackoverflow.com/q/7155747/11912 को इंगित करने लायक है जो आपके उत्तर में अतिरिक्त संदर्भ जोड़ता है। –