एक modelbinder बनाएँ, BindModel ओवरराइड, प्रकार की जाँच करें और आप
public class MyModelBinder
: DefaultModelBinder {
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) {
if (HasGenericTypeBase(bindingContext.ModelType, typeof(MyType<>)) {
// do your thing
}
return base.BindModel(controllerContext, bindingContext);
}
}
Global.asax में डिफ़ॉल्ट करने के लिए अपने मॉडल बांधने की मशीन सेट करने की जरूरत है कि क्या करना
protected void Application_Start() {
// Model Binder for My Type
ModelBinders.Binders.DefaultBinder = new MyModelBinder();
}
सामान्य आधार मिलान के लिए चेक
private bool HasGenericTypeBase(Type type, Type genericType)
{
while (type != typeof(object))
{
if (type.IsGenericType && type.GetGenericTypeDefinition() == genericType) return true;
type = type.BaseType;
}
return false;
}
स्रोत
2009-09-28 13:36:59
चूंकि यह प्रश्न अभी भी Google के परिणामों पर बहुत अधिक है, इसलिए मैं यह उल्लेख करना चाहता हूं कि शायद एमवीसी 3 के साथ आने वाला एक बेहतर समाधान [मॉडल बाइंडर प्रदाता] का उपयोग करना है (http://bradwilson.typepad.com/ ब्लॉग/2010/10/सेवा-स्थान-pt9-मॉडल-binders.html)। ऐसा इसलिए होता है कि आपको डिफ़ॉल्ट बाइंडर को प्रतिस्थापित करने की आवश्यकता नहीं है यदि आप जो कुछ कर रहे हैं वह _particular_ प्रकार को बाध्य करने के लिए विशेष नियम जोड़ने का प्रयास कर रहा है, जो कस्टम मॉडल को अधिक स्केलेबल बाध्यकारी बनाता है। –
मैं एमवीसी 2 एप्लिकेशन में सभी प्रकार के लिए कस्टम मॉडल बाइंडर सेट करने का तरीका खोजने के लिए संघर्ष कर रहा था। और यहां समाधान है! आपका बहुत बहुत धन्यवाद! – blazkovicz