2011-10-20 15 views
38

क्या आप डिफ़ॉल्ट लोगों के अलावा किसी अन्य फ़ोल्डर में एमवीसी को इंगित कर सकते हैं (दृश्य/साझा/संपादक टेम्पलेट्स & दृश्य/साझा/प्रदर्शन टेम्पलेट्स)? मैं या तो उन लोगों के नीचे उपफोल्डर्स में या साझा फ़ोल्डर के बाहर अन्य फ़ोल्डर्स में रखना चाहता हूं।एमवीसी टेम्पलेट (संपादक टेम्पलेट्स/डिस्प्ले टेम्पलेट्स)?

उदाहरण के लिए, अगर मैं इस फ़ोल्डर के अंतर्गत एक संपादक टेम्पलेट है:

~\Views\Order\ProductModel.cshtml

मैं इस tempalte नाम का उपयोग करने के लिए अपने EditorFor टेम्पलेट बता सकते हैं? हर संयोजन मैं के बारे में सोच सकते हैं

@Html.EditorFor(m => m.ProductModel, @"~\Views\Order\ProductModel.cshtml") 

मैं आगे का उपयोग कर की कोशिश की है & बैकस्लैश स्लैश .chstml बिना साथ /,,:

मैं पूरी तरह से यह योग्यता की कोशिश की, लेकिन यह काम नहीं करता। मुझे लगता है कि यह समर्थित नहीं है, लेकिन मैं कल्पना नहीं कर सकता कि यह क्यों नहीं होगा।

उत्तर

47

नहीं, मुझे डर है कि आप ऐसा नहीं कर सकते हैं।

For example, if I have an editor template under this folder

यह अब एक संपादक टेम्पलेट नहीं है। यह आंशिक है। यदि आप विभिन्न नियंत्रकों के बीच संपादक टेम्पलेट्स साझा करना चाहते हैं तो आप उन्हें ~/Views/Shared/EditorTemplates फ़ोल्डर में डाल सकते हैं।

जहां तक ​​सबफ़ोल्डर में चिंतित हैं तो आप ऐसा कर सकते हैं:

@Html.EditorFor(x => x.Foo, "Order/ProductModel") 

जो ~/Views/CurrentController/EditorTemplates/Order/ProductModel.cshtml या ~/Views/Shared/EditorTemplates/Order/ProductModel.cshtml संपादक टेम्पलेट प्रस्तुत करना होगा।

+6

यह समझ में आता है। मुझे नहीं पता था कि नियंत्रक के दृश्य फ़ोल्डर के नीचे आप संपादक/प्रदर्शन टेम्पलेट फ़ोल्डर हो सकते हैं। यह पूरा करता है जो मैं करने की कोशिश कर रहा हूं। धन्यवाद डारिन। –

+0

दूसरा पथ: '~/व्यू/साझा/संपादक टेम्पलेट्स/ऑर्डर/ProductModel.cshtml' मेरे लिए नहीं मिलता है ... क्या कोई गॉचा है? – Dmitry

+0

असल में यह पाता है, लेकिन मुझे एक त्रुटि देता है: 'शब्दकोश में गुजरने वाली मॉडल वस्तु' System.Collections.Generic.List''1 [जो भी हो। मॉडल। उत्पाद मॉडल] 'है, लेकिन इस शब्दकोश के लिए एक मॉडल आइटम की आवश्यकता है अपने उदाहरण में 'जो भी हो। मॉडल.प्रोडक्ट मॉडेल' टाइप करें। – Dmitry

3

यदि आप करते हैं इस:

@Html.EditorFor(x => x.Foo, "Order/ProductModel") 

यह एक संग्रह के रूप फू पार्स नहीं होंगे और प्रत्येक आइटम के लिए अपने संपादक टेम्पलेट लागू होते हैं। यह मान लेगा कि आपका संपादक टेम्पलेट पूरी तरह से संग्रह पर लागू होना चाहिए।

आप व्यक्तिगत रूप से प्रत्येक आइटम के संपादक टेम्पलेट लागू करना चाहते हैं, तो बस यह EditorTemplates फ़ोल्डर में आपके विचार फ़ोल्डर के अंतर्गत जगह (के रूप में यह पूर्वता होगा) और डिफ़ॉल्ट सिंटैक्स का उपयोग करें:

@Html.EditorFor(x => x.Foo) 
बेशक

, संपादक टेम्पलेट का नाम आपके संग्रह में आइटम के प्रकार से मेल खाना है।

4

पुराना प्रश्न, लेकिन ... विशिष्ट नियंत्रक के लिए प्रदर्शन/संपादक टेम्पलेट जोड़ने का उचित तरीका इसे DisplayTemplates या EditorTemplates उपफोल्डर में जोड़ना है।

यह मानते हुए कि, अपने उदाहरण में, आप OrderController है, तो आप बस प्रदर्शन टेम्पलेट अपने मॉडल के लिए उप-फ़ोल्डर में, रख सकते हैं इस तरह:

~\Views\Order\DisplayTemplates\ProductModel.cshtml 

फिर, अपनी दृष्टि से सामान्य रूप से प्रदर्शन टेम्पलेट फोन (पूर्व : `~ \ Views \ Order \ Index.cshtml से):

@Html.DisplayFor(m => m.MyProductModelProperty) 
+1

यह उत्तर संपादक/प्रदर्शन टेम्पलेट्स रखने के मुद्दे को बेहतर ढंग से संबोधित करता है जब उन्हें साझा करने के लिए समझ में नहीं आता है बल्कि एक निश्चित नियंत्रक के भीतर निहित होना चाहिए। पुन: उपयोग करने की कोशिश कर रहा है जो कभी-कभी रखरखाव के लिए पुन: उपयोग नहीं किया जा सकता है। इस उत्तर के लिए एक वोट। –

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