2009-07-07 13 views
11

नहीं मिल सकता है यह मैं पागल गाड़ी चला कर दिया गया है।MVC मॉडल सफलतापूर्वक अपडेट नहीं लेकिन कारण

मैं निम्नलिखित अपवाद हो रही

System.InvalidOperationException रखें: प्रकार 'Models.Expense' की मॉडल सफलतापूर्वक अपडेट नहीं किया गया था। System.Web.Mvc.Controller.UpdateModel [TModel] (TModel मॉडल, स्ट्रिंग उपसर्ग, String [] includeProperties, String [] excludeProperties, IDictionary`2 valueProvider) पर System.Web.Mvc.Controller.UpdateModel पर [TModel] (TModel मॉडल) atMVC.Controllers.BaseExpenseController.Edit (स्ट्रिंग आईडी, FormCollection संग्रह) C: \ परियोजनाओं \ Expenses.MVC \ नियंत्रकों \ BaseExpenseController.cs: लाइन 109

लेकिन मैं नीचे ट्रैक नहीं क्यों यह कर सकते हैं अपडेट नहीं हो रहा है, अपवाद में कुछ भी नहीं बताता है कि यह क्यों अपडेट नहीं हुआ है।

कोई बात नहीं?

+0

आप कोड पोस्ट कर सकते हैं नहीं होना चाहिए है कि क्या वहाँ है, यह इसके बिना नीचे ट्रैक करने के लिए मुश्किल है। – Lazarus

उत्तर

15

पकड़ने अपवाद या बजाय TryUpdateModel कहते हैं। TryUpdateModel अपवाद नहीं फेंक देगा अगर यह आपके मॉडल को अपडेट नहीं कर सकता है, तो यह सिर्फ झूठी वापसी करेगा। क्रेग द्वारा सुझाए गए मॉडलस्टेट में आपको त्रुटि विवरण मिलेगा। वास्तव में UpdateModel बस TryUpdateModel को कॉल करता है और फेंकता है तो फेंकता है।

+2

आप एक जादुई आदमी हैं। धन्यवाद। – SquidScareMe

+1

त्रुटि को अनदेखा करना इतना स्मार्ट नहीं है। जब तक यह आपको प्राप्त न करे तब तक यह आपको हर समय पीछा करेगा :) –

+0

मिलान के बिंदु पर, यह झूठ को संभालने के लिए "सर्वश्रेष्ठ" है। कुछ ऐसा है (! TryUpdateModel (मॉडल)) वापसी देखें ("संपादित करें", मॉडल)। मान लें कि आपके पास UI में सत्यापन किया गया है, यह त्रुटियों को दिखाएगा। – Daniel

12

controller.ModelState की जांच करना और त्रुटियों के साथ प्रविष्टियों के लिए देखो> 0.

2

यह किसी भी कोड देखे बिना यकीन के लिए कहना मुश्किल है, लेकिन हर बार जब मैं उस प्रकार के एक अपवाद है, समय यह डेटाबेस से संबंधित किया गया है के 99% देखा है। यह नहीं कहना कि रूट कारण कोड में कहीं नहीं है, लेकिन यह संभव है कि आप कुछ खो रहे हैं और डेटाबेस में अमान्य डेटा पास करने का प्रयास कर रहे हैं। अन्य मुद्दों को देखने के लिए कोई संबंध संभालना होगा।

0

मैं आम तौर पर 3 बातों की जांच।

  1. मॉडल सदस्यों getters और setters
  2. मैं मॉडल की आवश्यकताओं को पूरा कर रहा हूँ है से प्रत्येक करो। यानी: क्या सभी आवश्यक डेटा मौजूद और सही है?
  3. क्या मैं कहीं रिश्ते का उल्लंघन कर रहा हूं? क्या मुझे नेस्टेड ऑब्जेक्ट्स पर डिफ़ॉल्ट मान रखने की ज़रूरत है?

है कि अभी भी तो विफल रहता है मैं पर वापस जाएं;

class MyClass(FormCollection collection) 
{ 
    string a = collection["MyField"]; 

जो आमतौर पर काम करता है।

0

उत्पन्न वेबफ़ॉर्म पर, देखें कि क्या आप एक छिपी हुई फ़ील्ड, संभवतः किसी प्रकार का है कि अद्यतन नहीं किया जा सकता है की आईडी है।

1

मुझे एक ही समस्या है, और समस्या यह थी कि मैं मॉडल में IValidatableObject इंटरफ़ेस का उपयोग कर रहा हूं जो कि मैंने अपडेट किए गए संबंधों के संबंध में था। वास्तविक समस्या डेटाबेस में था, मान्यता उपज है कि मैं अद्वितीय स्तंभ :)

बात है के लिए प्रविष्टियों दोहराया गया है के बाद से। आपको UpdateModel या TryUpdateModel का उपयोग करना चाहिए, दोनों विधियां ModelState.IsValid अद्यतन करती हैं। अब, कभी-कभी यह पता लगाना मुश्किल हो सकता है कि त्रुटि क्या हो रही है। ModelState के लिए डीबगर देखें।ErrorKeys और जाँच एक प्रविष्टि जो वहाँ :)

चीयर्स

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