2012-05-04 15 views
6

हाय सब मैं वाहन नामक एक आधार वर्ग है और मैं वहाँ के सारे गुण सभी वाहनों के लिए आम है और मैं कई व्युत्पन्न जीप कार कहा जाता कक्षाएं, जो वाहन से निकाले जाते हैं है और बेस और व्युत्पन्न कक्षाओं के साथ बाध्यकारी एएसपी.नेट एमवीसी 3.0 मॉडल?

पूर्व अधिक गुण

जोड़ें:

public class Vehicle 
{ 
    public int Color { get; set; } 
    public double Cost { get; set; } 
} 


public class Car : Vehicle 
{ 
    public SelectListItem Option { get; set; } 
} 

मैं एक पृष्ठ वर्ग है, जिसमें मैं इस

public class Page 
{ 
    public List<Vehicle> vehicles { get; set; } 
} 

की तरह वाहनों की एक सूची है है मेरा विचार दृढ़ता से पृष्ठ वर्ग के लिए प्रकार इसलिए मेरे विचार में मैं सभी वाहनों पृष्ठ पर प्रदर्शित करने से अधिक पाशन कर रहा हूँइस तरह, इस कोड को @using के अंदर है (Html.BeginForm()) तो हम वापस पोस्ट उपयोगकर्ता चयन

for(int i=0;i<Model.Vehicles.Count;i++) 
{ 
    <div id="Question"> 
     @{ 
      @Html.EditorFor(m => m.Vehicle[i], VehicleConstants.GetTemplateName(Model.Questions[i])); 
     } 
    <br /> 
    </div> 
} 

मैं इतना समारोह कॉल VehicleConstants.GetTemplateName सिर्फ रिटर्न वाहन के प्रत्येक प्रकार के लिए एक संपादक टेम्पलेट का उपयोग कर रहा टेम्पलेट के नाम वाहन के प्रकार के आधार का उपयोग करने

इस टेम्पलेट बस कार वर्ग या जीप वर्ग (व्युत्पन्न वर्ग + आधार वर्ग)

समस्या मैं कर रहा हूँ है पर गुण लिखते हैं जब रूप है वापस पोस्ट किया गया मैं केवल अपने नियंत्रक में बेस क्लास वाहन के गुणों तक पहुंच सकता हूं, मुझे गुणों के लिए मूल्य नहीं मिल सकता है उप श्रेणी कार या जीप का।

 [HttpPost] 
    public string ReadPost(Page page) 
    { 
    } 

सबसे अच्छा तरीका है इन मूल्यों autobinded जब प्रपत्र वापस पोस्ट किया जाता है पाने के लिए क्या है?

कस्टम बाइंडर क्लास मेरा एकमात्र विकल्प बना रहा है? क्या कोई ऐसा करने के लिए मुझे कुछ नमूना कोड प्रदान कर सकता है? किसी भी मदद की बहुत सराहना की।

उत्तर

6

इसके लिए आपको एक कस्टम मॉडल बाइंडर का उपयोग करना होगा। डिफॉल्ट मॉडल बाइंडर को पता नहीं है कि कौन सा ठोस प्रकार तत्काल है। आप प्रत्येक पंक्ति के अंदर एक छिपी हुई फ़ील्ड शामिल कर सकते हैं जो आपके कस्टम मॉडल बाइंडर के ठोस प्रकार को इंगित करता है। मेरे पास shown this in action here है। वैसे ध्यान दें कि मानक टेम्पलेट नामकरण सम्मेलन का उपयोग करके आप for लूप से छुटकारा पा सकते हैं जिसका उपयोग आप VehicleConstants.GetTemplateName विधि के साथ कर रहे हैं।