2011-03-03 13 views
8

सेट कर रहा हूं तो यह त्रुटि मैं MVC2 का उपयोग कर हो रही है:ErrorMessageResourceName और त्रुटिसंदेश दोनों सेट कर सकते हैं नहीं होगा, लेकिन मैं केवल एक

Either ErrorMessageString or ErrorMessageResourceName must be set, but not both. 

यह [आवश्यक] सत्यापन DataAnnotation से आ रही है।

स्टैक ट्रेस: ​​

InvalidOperationException: Either ErrorMessageString or ErrorMessageResourceName must be set, but not both.] 
    System.ComponentModel.DataAnnotations.ValidationAttribute.SetupResourceAccessor() +89338 
    System.ComponentModel.DataAnnotations.ValidationAttribute.FormatErrorMessage(String name) +38 
    System.Web.Mvc.<Validate>d__1.MoveNext() +215 
    System.Web.Mvc.<Validate>d__5.MoveNext() +735 
    System.Web.Mvc.DefaultModelBinder.OnModelUpdated(ControllerContext controllerContext, ModelBindingContext bindingContext) +424 
    System.Web.Mvc.DefaultModelBinder.BindComplexModel(ControllerContext controllerContext, ModelBindingContext bindingContext) +732 
    System.Web.Mvc.ControllerActionInvoker.GetParameterValue(ControllerContext controllerContext, ParameterDescriptor parameterDescriptor) +475 
    System.Web.Mvc.ControllerActionInvoker.GetParameterValues(ControllerContext controllerContext, ActionDescriptor actionDescriptor) +152 
    System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +709 
    System.Web.Mvc.Controller.ExecuteCore() +162 
    System.Web.Mvc.<>c__DisplayClass8.<BeginProcessRequest>b__4() +58 
    System.Web.Mvc.Async.<>c__DisplayClass1.<MakeVoidDelegate>b__0() +20 
    System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +453 
    System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +371 

मैं इस (यह किसी भी समय एक [आवश्यक] विशेषता है टूट जाता है, बिना ठीक काम करता है) करने के लिए नीचे मेरे विचार मॉडल उबला हुआ है:

[Required(ErrorMessage = "")] 
[DataType(DataType.Text)] 
[DisplayName("Property Name")] 
public string MyProperty { get; set; } 

मेरे नियंत्रक एक खाली ViewModel देता है, और दृश्य में रूप पूरी तरह से खाली है ... बस एक सबमिट बटन।

+0

कस्टम सत्यापन पर इस त्रुटि का सामना करने पर मेरा जवाब [यहां] (http://stackoverflow.com/a/36878989/6061777) देखें। –

उत्तर

19

समस्या त्रुटि संदेश को रिक्त स्ट्रिंग पर सेट करने में निहित है। मुझे यह मानना ​​होगा कि किसी बिंदु पर स्ट्रिंग के लिए एक जांच है। एमवीसी कोड में लक्षण जो समस्याएं पैदा कर रहा है।

त्रुटि संदेश को "" (एक स्थान) में सेट करने से समस्या हल हो गई।

[EmailAddress(ErrorMessageResourceName = "FORM_FIELD_VALIDATION_EMAIL", ErrorMessageResourceType = typeof(App_GlobalResources.Common.View_Common_Forms), ErrorMessage = null)] 

ErrorMessage = " " काम नहीं करते:

+1

इसे भी शून्य पर सेट किया जा सकता है। – mikalai

0

मेरा अनुमान है [DataType(DataType.Text)] है संसाधनों में परिभाषित (System.ComponentModel.DataAnnotations.Resources में) एक सत्यापन संदेश और इस बात का अस्तित्व नहीं है और अपने [Required] इस InvalidOperationException खड़ी कर रहा है। [DataType] या [Required] को हटाने का प्रयास करें और देखें कि अपवाद दूर हो गया है या नहीं।

+0

वही परिणाम। मैं कल सुबह सुबह फ़ाइल को वापस करने जा रहा हूं और देखें कि क्या होता है। –

20

मेरे मामले में, मैं लिखने त्रुटिसंदेश = अशक्त, उदाहरण के लिए है।

+1

यह मेरे लिए काम करता है, इसे उत्तर के रूप में चिह्नित किया जाना चाहिए। – Taher

0

मुझे कस्टम सत्यापन प्रमाणीकरण के साथ एक समान समस्या थी।

IsValid विधि में मैं त्रुटि संदेश सेट कर रहा था। ठीक त्रुटिसंदेश propety को अर्पण दूर करने के लिए ...

protected override ValidationResult IsValid(object value, ValidationContext validationContext) 
{ 
    //code before ... 
    this.ErrorMessage = this.FormatErrorMessage(validationContext.DisplayName); //NOT GOOD... 
    ValidationResult validationResult = new ValidationResult(this.ErrorMessage, //And using the ErrorMessage Here... 
     new[] { validationContext.MemberName }); 
    return validationResult; 
} 

मैं यूनिट परीक्षण writting किया गया था और वे pasisng थे केवल अगर मैं चल रहा था/डिबगिंग एक एक करके किया गया था। लेकिन जब मैं "सभी चलाएं" पर क्लिक करता हूं, तो केवल पहला ही गुज़र रहा था? वे किसी भी तरीके से जुड़े नहीं हैं ...

मैंने https://stackoverflow.com/a/20848920/4798459 भी कोशिश नहीं की।

तो हाँ, फिक्स्ड त्रुटि मैसेज प्रोपेटी को असाइनमेंट को हटाना था!

संबंधित मुद्दे