के साथ एएसपी.नेट एमवीसी अपडेट मॉडेल मैं संकल्प-समय पर केवल एक इंटरफ़ेस के रूप में सेट किए गए मॉडल को पॉप्युलेट करने के लिए UpdateModel प्राप्त करने का प्रयास कर रहा हूं। उदाहरण के लिए, मेरे पास है:इंटरफ़ेस
// View Model
public class AccountViewModel {
public string Email { get; set; }
public IProfile Profile { get; set; }
}
// Interface
public interface IProfile {
// Empty
}
// Actual profile instance used
public class StandardProfile : IProfile {
public string FavoriteFood { get; set; }
public string FavoriteMusic { get; set; }
}
// Controller action
public ActionResult AddAccount(AccountViewModel viewModel) {
// viewModel is populated already
UpdateModel(viewModel.Profile, "Profile"); // This isn't working.
}
// Form
<form ... >
<input name='Email' />
<input name='Profile.FavoriteFood' />
<input name='Profile.FavoriteMusic' />
<button type='submit'></button>
</form>
भी ध्यान रखें कि मैं एक कस्टम मॉडल बांधने की मशीन है कि DefaultModelBinder से विरासत इस्तेमाल किया जा रहा है कि ओवरराइड CreateModel विधि में StandardProfile का एक उदाहरण के साथ IProfile भरता है।
समस्या यह है कि पसंदीदाफूड और पसंदीदा संगीत कभी पॉप्युलेट नहीं होते हैं। कोई विचार? आदर्श रूप से यह मॉडल बाइंडर में किया जाएगा, लेकिन मुझे यकीन नहीं है कि पूरी तरह से कस्टम कार्यान्वयन लिखने के बिना यह संभव है।
धन्यवाद, ब्रायन
खाली इंटरफ़ेस मुझे प्रत्येक साइट पर एक ही कोर कोड कोड का पुन: उपयोग करने की अनुमति देता है, जबकि मैं एक आईओसी का उपयोग करके एक अलग प्रोफ़ाइल प्रकार की आपूर्ति करता हूं। मैं इस उद्देश्य के लिए एक इंटरफेस के बजाय बेस क्लास का प्रयास करने में सक्षम हो सकता हूं, लेकिन मुझे यकीन है कि मैं और क्या कर सकता हूं जो मुझे लचीलापन देता है जो मैं चाहता हूं। मैं आपके द्वारा वर्णित मॉडल टाइप में देखूंगा। –
एक खाली बेस क्लास आपको बहुत अच्छा नहीं करेगा। तो CreateModel विधि के लिए अपने कोड में आप कुछ ऐसा कह रहे हैं: IoC.GetInstance() जिसे आपने एक नया मानक प्रोफाइल वापस करने के लिए प्लग किया है? दिलचस्प :)। मैं अभी भी अस्पष्ट हूं कि जब आप आईप्रोफाइल का उपयोग करते हैं तो आपको कितना कोड पुन: उपयोग करना पड़ सकता है, इसे पहले दाएं वर्ग में डालना है, लेकिन हाँ ... मुझे लगता है कि बाइंडिंग संदर्भ में टाइप निर्दिष्ट करना काम करेगा। –
anonymous
पुन: उपयोग इस तथ्य से आता है कि मेरी साइट के कई नियंत्रक एक आम असेंबली में हैं जो मैं संदर्भित करता हूं। प्रत्येक साइट जिसे मैं बनाता हूं नियंत्रकों और मॉडलों के लिए इस आम असेंबली का संदर्भ देता है। मैं फिर प्रत्येक साइट के लिए विशिष्ट अतिरिक्त नियंत्रक, मॉडल, विचार, आदि जोड़ सकते हैं। इस मामले में, मुझे साइट-दर-साइट आधार पर पूरी तरह से अलग प्रोफ़ाइल फ़ील्ड को परिभाषित करने में सक्षम होना आवश्यक था। इसलिए यहां सिर्फ एक इंटरफ़ेस की आवश्यकता है। –