2011-01-10 8 views
37

डीबग करने के लिए सर्वोत्तम प्रथाएं क्या आप मुझे एएसपी.नेट एमवीसी बाइंडिंग को डीबग करने के बारे में कोई सामान्य सलाह दे सकते हैं?एएसपी.नेट एमवीसी बाइंडिंग

जब सब कुछ अपेक्षित काम करता है, तो एएसपी.नेट एमवीसी बहुत अच्छा है। लेकिन अगर कुछ नहीं होता है, तो कुछ अज्ञात कारणों से कुछ नहीं जुड़ा होता है, मुझे समस्या का पता लगाना मुश्किल लगता है और मुझे लगता है कि एक साधारण समस्या को ट्रैक करने में घंटों खर्च करना मुश्किल लगता है।

[HttpPost] 
public ActionResult ShipmentDetails(Order order) 
{ 
    //do stuff 
} 

आइए आगे कल्पना करो कि आदेश वर्ग इस तरह दिखता है:

public class Order 
{ 
    public decimal Total {get; set;} 
    public Customer Customer {get; set;} 
} 

public class Customer 
{ 
    public string Name {get; set;} 
    public string Phone {get; set;} 
} 

क्या अच्छा स्थानों रहे हैं जब Order में शुरू करने के लिए

मान लें कि इस तरह एक नियंत्रक विधि में देश चलो नियंत्रक विधि सही ढंग से बंधे नहीं है? शुरू करने के लिए अच्छी जगह क्या हैं जब Order के कुछ हिस्सों को सही ढंग से बाध्य किया जाता है?

उत्तर

20

जैसा कि डारिन ने सुझाव दिया है, क्लाइंट से फ़ायरबग, फिडलर, या अन्य वेब डिबगिंग प्रॉक्सी टूल जैसे किसी सर्वर का उपयोग करके सर्वर से क्या भेजा जा रहा है, इसका निरीक्षण करने के साथ शुरू करें।

विफल होने पर, आप बाध्यकारी के दौरान क्या हो रहा है यह देखने के लिए स्रोत कोड से कदम उठाना चाहेंगे।

दो तरीके है कि मैं यह कर की सिफारिश कर सकते

  1. Include the System.Web.Mvc source code project in your application and reference this हैं। यह सीखने के लिए अच्छा है लेकिन संभवतः एक वाणिज्यिक अनुप्रयोग के लिए अनुशंसित नहीं है।

  2. डाउनलोड माइक्रोसॉफ्ट प्रतीक सर्वर से System.Web.Mvc के लिए प्रतीक, debug framework source code and set a break point appropriately to step through करने में सक्षम होना अपनी सेटिंग्स बदलें।

+0

'" एक ब्रेक प्वाइंट उचित रूप से सेट करें "'मॉडल बाइंडर के लिए यह कहां है? – StuperUser

+2

आप एमवीसी फ्रेमवर्क की 'डिफॉल्ट मॉडेल बाइंडर' क्लास '' पब्लिक वर्चुअल ऑब्जेक्ट बिन्दमोडेल (कंट्रोलर कॉन्टेक्स्ट कंट्रोलर कॉन्टेक्स्ट, मॉडल बाइंडिंग कॉन्टेक्स्ट बाइंडिंग कॉन्टेक्स्ट) 'विधि –

+1

प्रतीकों को सक्षम/डाउनलोड करने के बाद, आप वास्तव में स्रोत के लिए स्रोत कैसे प्राप्त कर सकते हैं, पर ब्रेकपॉइंट सेट करना चाहते हैं। ब्रेकपॉइंट सेट करने के लिए DefaultModelBinder'? –

3

शुरू करने के लिए एक अच्छी जगह डाउनलोड है और FireBug इंस्टॉल करें और देखें कि क्लाइंट से सर्वर पर क्या पोस्ट किया जाता है। फिर आप देखेंगे कि क्या गुम है, गलत है, ... Model Binding to a List जैसी ब्लॉग पोस्ट अच्छी पढ़ाई के साथ-साथ डिफ़ॉल्ट मॉडल बाइंडर का उपयोग करने वाले उचित वाक्यविन्यास से परिचित होने के लिए भी अच्छी पढ़ी जाती है।

+0

लेकिन यह आपको नहीं बताता कि एमवीसी बाध्यकारी डेटा के साथ क्या करता है ... मॉडल बाध्यकारी प्रक्रिया को ट्रैक करने का कोई तरीका है? – Dani

+0

@Dani, मॉडल बाध्यकारी के बारे में आप क्या जानना चाहते हैं? यह बहुत कठोर है: 'ग्राहक नाम' नामक एक इनपुट फ़ील्ड मॉडल की जटिल 'ग्राहक' संपत्ति की 'नाम' संपत्ति से जुड़ा होगा। इसके बारे में कुछ खास नहीं है। और एक बार जब आप सूचियों और संग्रहों की अवधारणा प्राप्त कर लेते हैं तो आप जानते हैं कि मॉडल बाइंडिंग कैसे काम करता है इसके बारे में सब कुछ पता है। जब यह फ़ायरबग नहीं करता है तो आपको अनुरोध दिखाएगा और आपको तुरंत पता चलेगा कि एक संपत्ति क्यों बाध्य नहीं हुई है: ऐसा इसलिए है क्योंकि या तो अनुरोध से गुम है, अमान्य नाम या अमान्य प्रारूप है। –

+0

मुझे लगता है कि मैं जो खो रहा हूं वह संग्रह और सूचियां है, और नई वस्तुओं के साथ क्या करना है। मैंने जो नमूनों का उपयोग किया है, अब तक यादृच्छिक आईडी के साथ ग्रिड में पंक्तियां जोड़ती हैं, और मेरे कोड में कुछ भी सीमा नहीं है, मैंने एक उदाहरण देखा है जो पुनः संख्या करने की कोशिश करता है, लेकिन मूल उदाहरण (स्टीव सैंडर्सन) इसके बिना काम करता है ... .. – Dani

23

हालांकि @russ's answer उपयोगी है और जब मुख्य प्रश्न बड़ी तस्वीर के बारे में अधिक है कभी कभी आवश्यक हो जाएगा, दोनों विकल्पों में एक छोटे से कम स्तर लगते हैं। इस प्रकार, मैं Glimpse की सिफारिश करता हूं।

इसके बारे में पृष्ठ से:

है & hellip; झलक आपको ब्राउज़र में अपनी वेबसाइट या वेब सेवा को डीबग करने की अनुमति देती है। झलक आपको अपने वेब सर्वर में क्या हो रहा है में "झलक" की अनुमति देता है। दूसरे शब्दों में फ़ायरबग आपके क्लाइंट साइड कोड को डिबग करने के लिए क्या है, झलक आपके सर्वर को क्लाइंट के भीतर डीबग करना है।

और चूंकि आपने विशेष रूप से डेटा बाध्यकारी के बारे में पूछा है, तो आप binding tab documentation को देखना चाहेंगे।आप डॉक्स से, देखने के लिए फिर से सक्षम हो जाएगा:

  1. क्रमसंख्या: आदेश, जिसमें MVC मॉडल बाइंडिंग बुनियादी ढांचे उपलब्ध आंकड़ों
  2. मॉडल बाइंडर बाध्य करने का प्रयास किया: मॉडल बाइंडर कि इस्तेमाल किया गया था बात यह है कि बाइंडर बाध्य करने के लिए
  3. प्रकार कोशिश कर रहा था का नाम:: बात यह है कि बाइंडर था प्रकार किसी दिए गए परिदृश्य
  4. संपत्ति/पैरामीटर में बाध्य करने के लिए कोशिश कर रहा
  5. का प्रयास किया गया मूल्य प्रदाता: प्रदाताओं कि बाइंडर उपयोग करने का प्रयास किसी दिए गए मूल्य प्राप्त करने के (और क्या यह सफल रहा था)
  6. का प्रयास किया गया मूल्य: वास्तविक मूल्य प्रदाता के साथ काम नहीं है (पोस्ट प्रकार वार्तालाप, आदि)
  7. संस्कृति: संस्कृति कि कच्चे मूल्य कच्चे मूल्य पार्स करने के लिए इस्तेमाल किया गया था: कच्चे मूल्य प्रदाता (पूर्व प्रकार वार्तालाप, आदि)
के साथ काम नहीं है

quick start देखें। संक्षेप में:

  1. http://yourhost/yourapp/Glimpse.axd करने के लिए glimpse.mvc3 पैकेज
  2. जाओ स्थापित करें और "उसे चालू करें।"
  3. विवरण के लिए अपने ऐप में किसी भी दृश्य के निचले दाएं भाग पर झलक आइकन पर क्लिक करें।
+0

बहुत उपयोगी जवाब, धन्यवाद! – nrodic

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