2010-09-22 7 views
6

क्या AddModelError() के अधिभार के लिए कोई उपयोग है जो एक पैरामीटर के रूप में अपवाद लेता है?मॉडलस्टेट का उद्देश्य। AddModelError अपवाद पैरामीटर के साथ

अगर मैं अपने नियंत्रक में यह कोड शामिल:

ModelState.AddModelError("", new Exception("blah blah blah")); 
ModelState.AddModelError("", "Something has went wrong"); 

if (!ModelState.IsValid) 
    return View(model); 

और मेरे विचार में निम्नलिखित:

<%= Html.ValidationSummary("Please correct the errors and try again.") %> 

तो केवल पाठ "कुछ गलत हो गया है" त्रुटि में प्रदर्शित होता है सारांश।

उत्तर

3

स्रोत की जांच मॉडलररर दोनों स्वीकार करता है और उपयोग मॉडल प्रकार रूपांतरण विफलताओं के लिए है।

इस विशेष मामले में यह अपवाद पेड़ को नीचे जाना और सामान्य शीर्ष स्तर अपवाद संदेश की बजाय वास्तविक रूट त्रुटि को खोजने के लिए आवश्यक अपवादों को पकड़ना है।

foreach (ModelError error in modelState.Errors.Where(err => String.IsNullOrEmpty(err.ErrorMessage) && err.Exception != null).ToList()) { 
    for (Exception exception = error.Exception; exception != null; exception = exception.InnerException) { 
     if (exception is FormatException) { 
      string displayName = propertyMetadata.GetDisplayName(); 
      string errorMessageTemplate = GetValueInvalidResource(controllerContext); 
      string errorMessage = String.Format(CultureInfo.CurrentCulture, errorMessageTemplate, modelState.Value.AttemptedValue, displayName); 
      modelState.Errors.Remove(error); 
      modelState.Errors.Add(errorMessage); 
      break; 
     } 
    } 
} 

जैसा कि आप इसे प्रारूप त्रुटि प्राप्त करने के लिए ModelError में अपवाद के माध्यम से लूपिंग देख सकते हैं। यह एकमात्र असली संदर्भ है जो मैं एमवीसी 2 और एमवीसी दोनों में पा सकता हूं 3.

यह कहा जाता है कि यह नियमित रूप से उपयोग के लिए शायद अनावश्यक है।

+1

मैंने देखा कि एमवीसी 3 में प्रमाणीकरण में अपवाद शामिल नहीं हैं, तो यह नहीं पता कि यह एक बग है या डिज़ाइन द्वारा हालांकि - लेकिन उन्हें अपने दस्तावेज़ों में स्पष्ट रूप से यह कहना चाहिए था। मैंने नया स्वरूप अपवाद ("कुछ") पारित करने का प्रयास किया - या तो काम नहीं किया। –

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