बाइंडिंग मैं है एक प्रकार:ASP.NET MVC - मिश्रण कस्टम और डिफ़ॉल्ट मॉडल
public class IssueForm
{
Order Order {get; set;}
Item Item {get; set;}
Range Range {get; set;}
}
मैं कस्टम मॉडल बांधने की मशीन बनाई आदेश और आइटम पर आवश्यकताओं के कारण है, लेकिन अभी भी रेंज डिफ़ॉल्ट मॉडल बाइंडर इस्तेमाल कर सकते हैं।
क्या मेरे कस्टम मॉडल बाइंडर के भीतर एक रेंज ऑब्जेक्ट वापस करने के लिए डिफ़ॉल्ट मॉडल बाइंडर को कॉल करने का कोई तरीका है? मुझे लगता है कि मुझे बस मॉडलबाइंडिंग कॉन्टेक्स्ट को सही तरीके से सेट करना है, लेकिन मुझे नहीं पता कि कैसे।
संपादित
पहली टिप्पणी और जवाब को देखते हुए - यह डिफ़ॉल्ट मॉडल बांधने की मशीन से इनहेरिट उपयोगी हो सकता है की तरह लगता है।
मेरी सेटअप के लिए अधिक विशिष्ट जानकारी को जोड़ने के लिए अब तक मेरे पास है:
public IssueFormModelBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
Order = //code to pull the OrderNumber from the context and create an Order
Item = //code to pull the ItemNumber from the context and create an Item
IssueForm form = IssueFormFactory.Create(Order, Item);
form.Range = // ** I'd like to replace my code with a call to the default binder **
return form
}
}
यह बात करने का एक बेवकूफ तरीका हो सकता है ... यह मेरा पहला मॉडल बांधने की मशीन है। बस मेरे वर्तमान कार्यान्वयन को इंगित करना।
संपादित करें # 2
तो जवाब ओवरराइड करने के लिए अगर मैं की तरह एक "मैं सभी बाध्यकारी किया हूँ" विधि में हुक और गुणों के साथ फैक्टरी विधि कॉल कर सकते हैं BindProperty काम करेंगे।
मुझे लगता है कि मुझे वास्तव में डिफॉल्टमोडेल बाइंडर कार्यान्वयन को देखना चाहिए और बेवकूफ होना छोड़ देना चाहिए। DefaultModelBinder से
public class CustomModelBinder : DefaultModelBinder {
protected override void BindProperty(ControllerContext controllerContext, ModelBindingContext bindingContext, PropertyDescriptor propertyDescriptor) {
if(propertyDescriptor.Name == "Order") {
...
return;
}
if(propertyDescriptor.Name == "Item") {
...
return;
}
base.BindProperty(controllerContext, bindingContext, propertyDescriptor);
}
}
मुझे यकीन नहीं है कि यह सबसे सुरुचिपूर्ण समाधान है, लेकिन क्या आप IModelBinder को लागू करने के बजाय डिफ़ॉल्ट मॉडेल बाइंडर से अपना कस्टम मॉडल बाइंडर प्राप्त कर सकते हैं? फिर जब आप BindModel को ओवरराइड करते हैं, तो जिम्मेदारी को डिफ़ॉल्ट मॉडेलबिन्डर से पास करें जहां उचित हो। अन्यथा, कस्टम बाध्यकारी का उपयोग करें। –
याहू, मैं कुछ मॉडल बाइंडर्स को IModelBinder और DefaultModelBinder से बाहर देख रहा हूं। मुझे लगता है कि DefaultModelBinder में कुछ अतिरिक्त विधियां हैं जो मुझे लगता है कि यह BindModel विधि से कॉल करता है, ताकि आप अपनी आवश्यकताओं को और अधिक केंद्रित कर सकें? – anonymous
यह केवल मॉडलबिंडर और कोड इनपुट प्रोसेसिंग और सत्यापन मैन्युअल रूप से अनदेखा करने का मेरा निर्णय पुष्टि करता है। अब मेरे पास वर्तमान और कल्पनाशील भविष्य की जरूरतों के अनुरूप, पारदर्शी और समायोज्य है। – User