मेरे पास एक कस्टम मॉडल बाइंडर है जिसका उपयोग मैं मूल प्रकार वाले छिपे हुए मान के आधार पर उपयुक्त मॉडल उप-प्रकार को वापस करने के लिए कर रहा हूं।

उदाहरण के लिए, मेरे विचार में (संपादक टेम्पलेट) मेरे पास है:

@model MyWebApp.Models.TruckModel
@Html.Hidden("ModelType", Model.GetType())
@Html.EditorFor(m => m.CabSize)

फिर, मेरे कस्टम मॉडल बाइंडर में, मेरे पास है:

    protected override object CreateModel(ControllerContext controllerContext, 
        ModelBindingContext bindingContext, Type modelType)
    {
        var typeValue = bindingContext.ValueProvider
            .GetValue(bindingContext.ModelName + ".ModelType");

        var type = Type.GetType((string)typeValue.ConvertTo(typeof(string)), true);

        var model = Activator.CreateInstance(type);

        bindingContext.ModelMetadata = ModelMetadataProviders.Current
            .GetMetadataForType(() => model, type);

        return model;
    }

typeValue और type चर उपयुक्त मानों पर सेट हो रहे हैं (प्रकार TruckModel है), लेकिन GetMetadataForType करने के बाद, model अभी भी शून्य/ डिफॉल्ट मान।

मैंने कई पोस्ट देखे (यहां और यहां एक जोड़े को नाम देने के लिए), और ऐसा लगता है जैसे मैं सब कुछ कर रहा हूं जैसा कि समझाया गया है यहाँ, लेकिन यह अभी भी मेरे लिए काम नहीं कर रहा है।

आप मेरे पिछला का हवाला देकर व्यू/मॉडल सेटअप के बारे में अधिक जानकारी प्राप्त कर सकते हैं। इस विषय पर पोस्ट करें।

1
Jerad Rose 11 नवम्बर 2011, 02:29
1
मुझे लगता है कि आप इस स्तर पर डिफ़ॉल्ट मानों की अपेक्षा करेंगे - GetPropertyValue पर कॉल के बाद ही मॉडल वास्तव में दृश्य से मूल्यों के साथ पॉप्युलेट किया जाएगा - क्या आपने उस विधि से कदम उठाया है?
 – 
sydneyos
11 नवम्बर 2011, 09:58
- आप सही कह रहे हैं, इस बिंदु पर मान सेट नहीं होने चाहिए। मेरे नियंत्रक (एक असंबंधित अपवाद ArgumentNullException, लेकिन मुझे लगा कि संबंधित था) को बनाने से पहले एक अपवाद को फेंकने के कारण मैं इसे कभी नहीं देख पा रहा था। एक बार जब मैंने इस मुद्दे को ठीक कर लिया, तो यह मेरे नियंत्रक के पास गया, और जैसा कि आपने कहा, मेरा मॉडल इस बिंदु पर आबाद था। यदि आप इसे उत्तर के रूप में पोस्ट कर सकते हैं तो मैं इसे स्वीकार करूंगा। धन्यवाद।
 – 
Jerad Rose
11 नवम्बर 2011, 18:41

1 उत्तर

सबसे बढ़िया उत्तर

जैसा कि @sydneyos टिप्पणियों में ऊपर बताता है, मेरा मॉडल वास्तव में पॉप्युलेट हो रहा था, लेकिन जाहिर तौर पर CreateModel विधि में, लौटाए गए मॉडल में उस बिंदु पर मान नहीं होंगे।

मेरे मामले में, मुझे इस पद्धति का अनुसरण करने वाला एक ArgumentNullException मिल रहा था, जो मुझे लगा कि मॉडल के पॉप्युलेट नहीं होने के कारण था। लेकिन पता चला, यह असंबंधित था, और एक बार यह तय हो जाने के बाद, मॉडल बाइंडिंग ने उम्मीद के मुताबिक काम किया।

0
Jerad Rose 15 नवम्बर 2011, 18:51