2012-03-28 9 views
7

मैं EditorForModel के मेरे अनुकूलन और मेरे कोड और अंतर्निहित एमवीसी 3 हेल्पर्स द्वारा उत्सर्जित HTML तत्वों के नामकरण के साथ संघर्ष कर रहा हूं। मेरा कोड बहुत सरल है, और स्पष्ट रूप से प्रस्तुत तत्वों को नाम देने जैसे कुछ subtleties याद आ रही है।मैं एमवीसी 3 संपादक टेम्पलेट्स को अनुकूलित करने के लिए उन्नत संसाधनों की तलाश में हूं

मैं उन्नत संसाधनों की तलाश में हूं जो मेरे वर्तमान विकास के इस क्षेत्र को विशेष रूप से छोटे उप-मॉडल में मुख्य दृश्य मॉडल को विभाजित करने के लिए एक दृश्य के साथ, ताकि मैं एक दृश्य में तीन EditorForModel कॉलों को लागू कर सकूं , फॉर्म कॉलम या टैब पृष्ठों पर उत्पन्न मॉडल संपादकों को विभाजित करने के लिए।

@{ 
    // TODO Filtering for subsets of model without having to bind separate models. 
     var properties = ViewData.ModelMetadata.Properties.Where(pm => pm.ShowForEdit && !pm.IsComplexType && !ViewData.TemplateInfo.Visited(pm)); 
    } 
<fieldset> 
    <legend>@ViewData.ModelMetadata.DisplayName</legend> 
    <ul class="form-column"> 
     @foreach (var prop in properties) 
     { 
      <li> 
        @{ 
      if (prop.HideSurroundingHtml) 
      { 
         @Html.Editor(prop.DisplayName ?? prop.PropertyName) 
      } 
      else 
      { 
         @Html.Label(prop.PropertyName, (prop.IsRequired ? "* " : "") + (prop.DisplayName ?? prop.PropertyName)) 
         @Html.Editor(prop.PropertyName) 
      } 
        } 
      </li> 
     } 
    </ul> 
</fieldset> 

मैं नकल की और Brad Wilson's blog पर this article पर Object.ascx उदाहरण टेम्पलेट से इस कोड को संशोधित किया है:

मेरे वर्तमान डिफ़ॉल्ट EditorForModel टेम्पलेट के 'ओवरराइड' इस प्रकार है। जितना संभव हो उतना समृद्ध तरीके से जितना संभव हो सके उतने परिदृश्यों को पूरा करने के लिए इसे समृद्ध करने के लिए मैं किस संसाधन से परामर्श कर सकता हूं?

+1

में आप शक्तिशाली एचटीएमएल टेम्पलेट्स के लिए देख रहे हैं, मैं FubuMVC टीम से एचटीएमएल टेम्पलेट सम्मेलनों बाहर की जाँच की सिफारिश करेंगे। वे एएसपी.नेट एमवीसी के साथ 100% संगत हैं और अधिक लचीला/संगत। मैं उन्हें 2+ सालों से उपयोग कर रहा हूं और बिल्कुल इसे प्यार करता हूं। http://craigcav.wordpress.com/2011/11/22/applying-conventions-in-asp-net-mvc/ यदि आप निक के पोस्ट पर क्लिक करते हैं तो एएसपी.नेट एमवीसी में यह काम करने के लिए एक लिंक है। – Ryan

+1

मुझे नहीं लगता कि आप उस टेम्पलेट से भी बहुत बेहतर कर सकते हैं, यानी: प्रत्येक संपत्ति के लिए लेबल + संपादक या डिस्प्ले की एक सूची। यदि आप अपने ऑब्जेक्ट टेम्पलेट को बहुत सामान्य होने के लिए चाहते हैं, तो केवल एक ही सुधार जो आप कर सकते हैं, ऑर्डर विशेषता को संभालने के लिए गुणों को सूचीबद्ध करने के क्रम में निर्णय लेना है। दूसरी ओर आप अपने ढांचे को कस्टम विशेषताओं के आधार पर डिज़ाइन कर सकते हैं जो टेम्पलेट को व्यवस्थित करने के तरीके को नियंत्रित करते हैं। हालांकि, वे जिस तरह से करते हैं वे आपके आवेदन पर दृढ़ता से निर्भर करते हैं। –

उत्तर

1

आपका टेम्पलेट एक बहुत ही सामान्य संपादक के लिए बहुत अच्छा लगता है। अगर मैं आपके प्रश्न को सही तरीके से समझता हूं, तो आप अपने मॉडल गुणों को तोड़ने और फ़िल्टर करने के अधिक तरीकों की तलाश में हैं।

मॉड्यूल को सब्सट्रेट बनाने के बिना मॉडल को फ़िल्टर करने का एक तरीका गुणों का उपयोग करना होगा। आप जितनी चाहें उतनी विशेषताओं को बना सकते हैं, और उन्हें IMetadataAware लागू कर सकते हैं। वहां आप ModelMetadata.AdditionalValues प्रॉपर्टी बैग में मनमानी गुण जोड़ सकते हैं, और आपके संपादक टेम्पलेट्स उन मानों का निरीक्षण कर सकते हैं।

वैकल्पिक रूप से आप अपना खुद का कस्टम ModelMetadataProvider लागू कर सकते हैं जो एक कस्टम ModelMetadata ऑब्जेक्ट देता है जिसमें आपके इच्छित गुण थे।

या तो आप फिल्टर व्यवहार को परिभाषित करने के लिए बस अपने मॉडल को एनोटेट करने की अनुमति देंगे।

इन दोनों ही तरीकों से किसकी द्वारा वर्णित हैं, ब्रैड विल्सन, इस blog post.

+0

धन्यवाद @ bhamlin, मैंने अपने उप-मॉडल को विभाजित करने के लिए विशेषताओं पर विचार किया है। यह एक कस्टम एक्सएमएल मेटाडाटा प्रदाता के विकास की रोमांचक संभावना का भी आह्वान कर सकता है, इसलिए मैं वास्तव में मेटाडेटा प्रबंधित करने के लिए एक डिजाइनर का उपयोग कर सकता हूं। बहुत लेख सूचक, धन्यवाद। – ProfK

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

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