asp.net mvc - एमवीसी 4 डिफॉल्टमोडेल बाइंडर को अनदेखा करता है। रिसोर्स क्लासकी



asp.net-mvc localization (1)

यह एएसपी.नेट एमवीसी 4 के लिए विशिष्ट नहीं है। यह एएसपी.नेट एमवीसी 3 में समान था। आप DefaultModelBinder.ResourceClassKey का उपयोग करके आवश्यक संदेश सेट नहीं कर सकते हैं, केवल PropertyValueInvalid

आप जो खोज रहे हैं उसे प्राप्त करने का एक तरीका कस्टम RequiredAttributeAdapter एट्रिब्यूट RequiredAttributeAdapter को परिभाषित करना है:

public class MyRequiredAttributeAdapter : RequiredAttributeAdapter
{
    public MyRequiredAttributeAdapter(
        ModelMetadata metadata,
        ControllerContext context,
        RequiredAttribute attribute
    ) : base(metadata, context, attribute)
    {
        attribute.ErrorMessageResourceType = typeof(Messages);
        attribute.ErrorMessageResourceName = "PropertyValueRequired";
    }
}

कि आप Application_Start में पंजीकरण करेंगे:

DataAnnotationsModelValidatorProvider.RegisterAdapter(
    typeof(RequiredAttribute),
    typeof(MyRequiredAttributeAdapter)
);

अब जब एक गैर-शून्य क्षेत्र को मान निर्दिष्ट नहीं किया जाता है, तो त्रुटि संदेश संदेश से आएगा। App_GlobalResources जहां App_GlobalResources को App_GlobalResources अंदर परिभाषित किया जाना चाहिए।

एक PropertyValueRequired कुंजी के साथ App_GlobalResources संसाधन फ़ाइल जोड़ना और DefaultModelBinder.ResourceClassKey को फ़ाइल नाम पर MVC 4 पर कोई प्रभाव नहीं पड़ता है। स्ट्रिंग The {0} field is required नहीं है। मैं प्रत्येक आवश्यक फ़ील्ड पर संसाधन वर्ग प्रकार और कुंजी सेट नहीं करना चाहता हूं। क्या मैं कुछ भूल रहा हूँ?

संपादित करें:

मैंने आवश्यक अनुकूलन कार्य करने के लिए डारिन डिमिट्रोव के कोड पर एक छोटा सा संशोधन किया है:

public class MyRequiredAttributeAdapter : RequiredAttributeAdapter
{
    public MyRequiredAttributeAdapter(
        ModelMetadata metadata,
        ControllerContext context,
        RequiredAttribute attribute
    )
        : base(metadata, context, attribute)
    {
        if (attribute.ErrorMessageResourceType == null)
        {
            attribute.ErrorMessageResourceType = typeof(Messages);
        }
        if (attribute.ErrorMessageResourceName == null)
        {
            attribute.ErrorMessageResourceName = "PropertyValueRequired";
        }
    }
}




model-binding