2009-09-26 6 views
7

मैं ValidationAttribute की तरह है:ASP.NET MVC: ValidationAttribute और स्थानीय त्रुटिसंदेश

public class Username : ValidationAttribute 
{ 
    public override bool IsValid(object value) 
    { 
    if (value == null) 
    return false; 

    return RegExp.Validate(RegExpLib.Username,value.ToString()); 
    } 
} 

..और इस तरह इसे का उपयोग:

public class AccountSignIn 
{ 
    [Username(ErrorMessageResourceName ="txtUsername",ErrorMessageResourceType=typeof(SignIn))] 
    public string Username { get; set; } 

    public string Password { get; set; } 

    public bool RememberMe { get; set; } 

    public string ReturnUrl { get; set; } 
} 

साइन इन करें App_GlobalResources में संसाधन फ़ाइल है और "txtUsername" - संसाधन फ़ाइल में स्ट्रिंग नाम है।

समस्या: त्रुटि संदेश नहीं दिखाए जाते हैं।

प्रश्न: यदि मेरे पास वेबसाइट पर कुछ भाषाएं हैं तो त्रुटि संदेश कैसे सेट करें।

एक और जानकारी:

मैं दृश्य से सक्षम पहुँच SignIn.txtUsername या परियोजना में किसी भी फाइल कर रहा हूँ। नियंत्रक से

ModelState.AddModelError("Username", Resources.SignIn.txtUsername); 

रूप में अच्छी तरह ठीक काम करता है .. मैं ValidationAttribute अंदर त्रुटिसंदेश असाइन कर सकते हैं, लेकिन मिला दूसरा सत्यापन के बाद त्रुटि की कोशिश ... अगर मैं जगह इस तरह की जांच -

if(ErrorMessage != Resources.SignIn.txtUsername) 
     ErrorMessage = Resources.SignIn.txtUsername; 

मैं के बाद त्रुटि है मैं दूसरी भाषा में स्विच करता हूं - त्रुटि संदेश केवल एक बार असाइन किया जा सकता है।

कृपया सलाह दें कि मैं इसे कैसे हल कर सकता हूं।

अग्रिम धन्यवाद।

उत्तर

1

संसाधन संपादक में सुनिश्चित करें कि आपकी संसाधन दृश्यता "सार्वजनिक" पर सेट है और "आंतरिक" नहीं है। अन्यथा DataAnnotations द्वारा किए गए प्रतिबिंब काम नहीं करेंगे।

+0

जैसा कि मैंने लिखा है, मैं वैश्विक संसाधनों का उपयोग कर रहा हूं "साइनइन App_GlobalResources पर संसाधन फ़ाइल है" –

+0

दुर्भाग्यवश, आप App_GlobalResources सार्वजनिक में संसाधन नहीं बना सकते हैं। आपको इसके बजाय "Properties" फ़ोल्डर से संसाधन फ़ाइल का उपयोग करना होगा - बाएं मेनू से प्रोजेक्ट पर राइट क्लिक करें, संसाधनों का चयन करें और "इस प्रोजेक्ट ..." पर क्लिक करें। "Resources.resx" नाम की डिफ़ॉल्ट संसाधन फ़ाइल बनाई जाएगी। आप इसका नाम बदल सकते हैं (यानी "मॉडलइरर्स") और कोड में उपयोग करें: [आवश्यक (ErrorMessageResourceName = "password_Required", ErrorMessageResourceType = typeof (Properties.ModelErrors))] – Feryt

+0

हाँ, यह सच है। डेटा एन्क्रिप्शन का उपयोग ASP.NET के बाहर किया जाना है, इसलिए उन्हें App_XxxResources के बारे में कुछ भी पता नहीं है और केवल पारंपरिक संसाधन फ़ाइलों के साथ काम करते हैं। –

10

मुझे स्थानीयकृत त्रुटि संदेशों और डेटा एन्नोटेशन का उपयोग करने में कुछ समस्याएं थीं, जो आपकी स्थिति के समान ही थीं। हालांकि मैं त्रुटि संदेश के रूप में प्रदर्शित रिक्त स्थान के साथ समाप्त नहीं हुआ था, लेकिन मुझे हमेशा कुछ अपवाद फेंक दिया गया। मेरे लिए समाधान था:

  1. App_GlobalResources में

    /Errors.resx, संसाधन फ़ाइल को खोलने बदल यह गुण कार्रवाई का निर्माण करने के लिए है: एंबेडेड संसाधन, कस्टम उपकरण: PublicResXFileCodeGenerator, कस्टम उपकरण नामस्थान: संसाधन (दृश्य स्टूडियो में कुछ अजीब करता है इन autogenerating, तो फिर से वापस है कि चीजें ठीक हैं संसाधन फ़ाइल की पहुँच संशोधक सार्वजनिक करने के लिए कोड उत्पन्न (Errors.Designer.cs) नाम स्थान और पहुँच संशोधक हैं कि फ़ाइल से

  2. चेक जाँच)

  3. बदलें सही बात।

  4. मॉडल वर्ग से

मेरे उदाहरण यह प्रयास करें:

[Required(ErrorMessageResourceType = typeof(Resources.Errors), ErrorMessageResourceName="ResponseMessageRequired")] 
public string message { get; set; } 
0

यह सवाल बहुत पुराना लग रहा है। मेरे एमवीसी 3 प्रोजेक्ट में विशेषता पैरामीटर प्रकार के रूप में resx (मेरी त्रुटि संदेश स्टोर) का उपयोग करते समय मुझे एक ही समस्या थी।

यह मेरी समस्या हल:

  • सेट "Messages.resx" - इस प्रकार फ़ाइल संपत्ति "एक्शन बनाएँ" के लिए "एंबेडेड संसाधन"
  • बदलें विशेषता पैरामीटर: [Range(0, 999, ErrorMessageResourceType = typeof(Resources.Messages), ErrorMessageResourceName = "ERR_NUM_NOT_IN_RANGE")]

उम्मीद है की यह मदद करेगा।