2009-08-05 10 views
11

एचटीसीहेल्पर संपादक के लिए एमवीसी 2 के अतिरिक्त के साथ() किसी दिए गए मॉडल ऑब्जेक्ट के लिए दृढ़ता से टाइप किए गए डिस्प्ले और एडिटर टेम्पलेट्स बनाना और इसके साथ झुकाव करना संभव नहीं है। संपादक नियंत्रण के मजबूत-टाइपिंग को खोए बिना संपादक को अतिरिक्त मॉडल डेटा कैसे पास किया जाए, इस बारे में थोड़ा सा स्टंप किया गया है।एएसपी.नेट एमवीसी 2 - एचटीएमएल.एडिटरफ़ोर() और कस्टम संपादक टेम्पलेट्स

क्लासिक उदाहरण: उत्पाद श्रेणी है। ProductEditor में श्रेणी के लिए ड्रॉपडाउनलिस्ट है जिसमें सभी श्रेणियों के नाम शामिल हैं। ProductEditor को दृढ़ता से उत्पाद पर टाइप किया गया है और हमें श्रेणियों के साथ-साथ उत्पाद की चयन सूची में पास करने की आवश्यकता है।

एक मानक दृश्य के साथ हम मॉडल डेटा को एक नए प्रकार में लपेटेंगे और साथ ही पास करेंगे। संपादक टेम्पलेट के साथ हम कुछ मानक कार्यक्षमता खो देते हैं यदि हम एक से अधिक ऑब्जेक्ट वाले मिश्रित मॉडल में गुजरते हैं (पहली बात मैंने देखा है कि लेबलफ़ोर/टेक्स्टबॉक्स के सभी तरीके "ऑब्जेक्ट्स" ऑब्जेक्ट जैसे "ऑब्जेक्ट" ऑब्जेक्ट " ")।

क्या मैं इसे गलत कर रहा हूं या HTML.EditorFor() में अतिरिक्त व्यूडेटा/मॉडल पैरामीटर होना चाहिए?

उत्तर

13

आप या तो एक कस्टम ViewModel जो दोनों गुण है या आप ViewData उपयोग करने के लिए उस जानकारी में उत्तीर्ण होना होगा पैदा करते हैं।

+2

स्वाभाविक रूप से इस समझ में आता है, लेकिन मैं मदद नहीं कर सकता है, लेकिन आप देखते हैं कि कस्टम में मॉडल रखने ViewModel प्रपत्र फ़ील्ड नाम कस्टम ViewModel में वस्तु की संपत्ति नाम होना करने के लिए कारण बनता है। यह नहीं कि यह एक समस्या है लेकिन यह मॉडल को अद्यतन करने के लिए एक और कदम जोड़ता है। मैं शायद अनावश्यक रूप से आह्वान कर रहा हूँ? –

5

मैं अभी भी सीख रहा हूँ, लेकिन मैं एक ऐसी ही समस्या है जिसके लिए मैं एक काम किया था उपाय। मेरी श्रेणी एक enum है और मैं एक टेम्पलेट नियंत्रण का उपयोग करता हूं जो चयन टैग के लिए सामग्री निर्धारित करने के लिए enum की जांच करता है।

यह रूप में ध्यान में रखते हुए किया जाता है:

<%= Html.DropDownList 
      (
      "CategoryCode", 
      MvcApplication1.Utility.EditorTemplates.SelectListForEnum(typeof(WebSite.ViewData.Episode.Procedure.Category), selectedItem) 
      ) %> 

श्रेणी के लिए enum आइटम का चयन करें में पाठ मान के रूप में प्रयोग की जाने वाली विशेषताओं का विवरण के साथ सजाया जाता है:

public enum Category 
     { 
      [Description("Operative")] 
      Operative=1, 
      [Description("Non Operative")] 
      NonOperative=2, 
      [Description("Therapeutic")] 
      Therapeutic=3 
     } 
     private Category _CategoryCode; 
     public Category CategoryCode 
     { 
      get { return _CategoryCode; } 
      set { _CategoryCode = value; } 
     } 

SelectListForEnum निर्माणों वर्तमान में चयनित आइटम के लिए enum परिभाषा और अनुक्रमणिका का उपयोग करके चुनिंदा वस्तुओं की सूची निम्नानुसार है:

 public static SelectListItem[] SelectListForEnum(System.Type typeOfEnum, int selectedItem) 
    { 
     var enumValues = typeOfEnum.GetEnumValues(); 
     var enumNames = typeOfEnum.GetEnumNames(); 
     var count = enumNames.Length; 
     var enumDescriptions = new string[count]; 
     int i = 0; 
     foreach (var item in enumValues) 
     { 
      var name = enumNames[i].Trim(); 
      var fieldInfo = item.GetType().GetField(name); 
      var attributes = (DescriptionAttribute[])fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), false); 
      enumDescriptions[i] = (attributes.Length > 0) ? attributes[0].Description : name; 
      i++; 
     } 
     var list = new SelectListItem[count]; 
     for (int index = 0; index < list.Length; index++) 
     { 
      list[index] = new SelectListItem { Value = enumNames[index], Text = enumDescriptions[index], Selected = (index == (selectedItem - 1)) }; 
     } 
     return list; 
    } 

अंतिम परिणाम एक अच्छी तरह से प्रस्तुत डीडीएल है।

उम्मीद है कि इससे मदद मिलती है। ऐसा करने के बेहतर तरीके के बारे में कोई भी टिप्पणी की सराहना की जाएगी।

4

ViewData.ModelMetadata का उपयोग करने का प्रयास करें, इसमें आपकी सभी कक्षा टिप्पणियां शामिल हैं।

बहुत बढ़िया लेख http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-4-custom-object-templates.html

+0

आपको बहुत बहुत धन्यवाद। मैं इसे दिनों के लिए देख रहा हूं, पिछली बार जब मैं उस पर ठोकर खाई तो बुकमार्क करना भूल गया। – jfar

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