मेरे पास एक कस्टम मॉडल बाइंडर है जिसका उपयोग मैं मूल प्रकार वाले छिपे हुए मान के आधार पर उपयुक्त मॉडल उप-प्रकार को वापस करने के लिए कर रहा हूं।
उदाहरण के लिए, मेरे विचार में (संपादक टेम्पलेट) मेरे पास है:
@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 उत्तर
जैसा कि @sydneyos टिप्पणियों में ऊपर बताता है, मेरा मॉडल वास्तव में पॉप्युलेट हो रहा था, लेकिन जाहिर तौर पर CreateModel विधि में, लौटाए गए मॉडल में उस बिंदु पर मान नहीं होंगे।
मेरे मामले में, मुझे इस पद्धति का अनुसरण करने वाला एक ArgumentNullException
मिल रहा था, जो मुझे लगा कि मॉडल के पॉप्युलेट नहीं होने के कारण था। लेकिन पता चला, यह असंबंधित था, और एक बार यह तय हो जाने के बाद, मॉडल बाइंडिंग ने उम्मीद के मुताबिक काम किया।
संबंधित सवाल
जुड़े हुए प्रश्न
नए सवाल
c#
C # (उच्चारण "तेज देखें") Microsoft द्वारा विकसित एक उच्च स्तरीय, सांख्यिकीय रूप से टाइप किया हुआ, बहु-प्रतिमान प्रोग्रामिंग भाषा है। C # कोड आमतौर पर Microsoft के .NET परिवार के टूल और रन-टाइम को लक्षित करता है, जिसमें .NET फ्रेमवर्क, .NET कोर और Xamarin अन्य शामिल हैं। C # या C # के औपचारिक विनिर्देश में लिखे गए कोड के बारे में प्रश्नों के लिए इस टैग का उपयोग करें।
ArgumentNullException
, लेकिन मुझे लगा कि संबंधित था) को बनाने से पहले एक अपवाद को फेंकने के कारण मैं इसे कभी नहीं देख पा रहा था। एक बार जब मैंने इस मुद्दे को ठीक कर लिया, तो यह मेरे नियंत्रक के पास गया, और जैसा कि आपने कहा, मेरा मॉडल इस बिंदु पर आबाद था। यदि आप इसे उत्तर के रूप में पोस्ट कर सकते हैं तो मैं इसे स्वीकार करूंगा। धन्यवाद।