2008-09-15 11 views
14

जब मैं एएसपी.नेट के साथ काम कर रहा हूं, मुझे लगता है कि हमेशा अनपेक्षित चीजें होती हैं जो मैं हमेशा डीबग करने के लिए ले जाती हूं। मुझे लगता है कि इनकी समेकित सूची उन "अजीब त्रुटि" परिस्थितियों के लिए बहुत अच्छी होगी, साथ ही मंच में अजीबता के हमारे ज्ञान को विस्तारित करने के लिए।एएसपी.नेट - कॉमन गॉटचास

तो: अपने "गोचा" में से एक के साथ जवाब दें!

मैं शुरू करेंगे: ASP.NET (VB) के तहत, एक आज़माएं/कैच ब्लॉक के अंदर एक Response.Redirect प्रदर्शन वर्तमान प्रतिक्रिया के निष्पादन, जो दो समवर्ती एक ही सत्र के खिलाफ क्रियान्वित प्रतिक्रियाएँ को जन्म दे सकता नहीं रुकती ।

+4

आपने एक उत्तर –

+0

करने के लिए अपने उदाहरण बढ़ना चाहिए मुझे लगता है कि यह एक समुदाय विकी –

+0

Dangit होना चाहिए! इच्छा है कि मैंने इसे कुछ हफ्ते पहले देखा था! मैं उस चीज़ से पकड़ा गया था। – elbillaf

उत्तर

6

कस्टम नियंत्रण का जीवन चक्र पूरी तरह से उसी पृष्ठ के पृष्ठ जीवन चक्र घटनाओं के साथ मेल नहीं खाता है।

21

पेज इनिट इवेंट के बाद गतिशील रूप से नियंत्रण जोड़ें, क्योंकि यह व्यूस्टेट पेड़ को खराब कर देगा।

+0

+1 धन्यवाद, अच्छी टिप! –

3

अगर आपके पास उच्चारण किए गए वर्ण हैं तो नोटपैड के साथ अपना web.config संपादित न करें, यह गलत एन्कोडिंग के साथ इसे बदल देगा। हालांकि यह वही दिखाई देगा। बस आपका आवेदन नहीं चलेगा।

+0

आईएमई समस्या यह है कि यह फ़ाइल की शुरुआत में एक बीओएम सम्मिलित करता है। .aspx फ़ाइलों के लिए सही है, लेकिन web.config के लिए गलत है (XML दस्तावेज़ों को बीओएम से शुरू नहीं होना चाहिए।) – finnw

8

देखें ... यदि आप इसका उपयोग कर रहे हैं ... यदि आप इसका ध्यान नहीं दे रहे हैं तो नियंत्रण से बाहर निकल सकते हैं।

+0

व्यूस्टेट उपयोगकर्ता द्वारा नियंत्रित किए गए परिवर्तनों के लिए ठीक है। ऐसा तब होता है जब आपके कोड द्वारा किए गए परिवर्तन वहां पर अपना रास्ता बनाना शुरू करते हैं कि आपको कोई समस्या है। –

+0

मैं सहमत हूं ... यह सिर्फ कुछ है जिसे आप नजर रखना चाहते हैं ... क्योंकि यह ढीलापन के लिए प्रवण है। – mattruma

0

आप एप्लिकेशन के रूट फ़ोल्डर के ऊपर किसी भी चीज़ का संदर्भ नहीं दे सकते।

+0

यह एक सुरक्षा सुविधा है। अन्यथा दुर्भावनापूर्ण कोड, किसी साझा सर्वर पर कहें, पूरे ड्राइव को ब्राउज़ कर सकता है। – MatthewMartin

0

मुझे जो भी कोड बनाए रखना है, वह ऐसा लगता है कि यह vb6 में लिखा गया था, जो नई शैलियों की पूरी अज्ञानता दिखा रहा है।

मैं CreateObject(), अत्यधिक <%%> ब्लॉक, और/या इसके बजाए AndAlso/OrElse, Len() की बजाय चीजों की बात कर रहा हूं। तरंगदैर्ध्य(), एस/ओ हंगेरियन उपसर्ग युद्ध, मंद MyVariable कोई प्रकार नहीं, कोई वापसी प्रकार के साथ काम ... मैं जा सकता था।

1

नियंत्रण नियंत्रण का उपयोग करते समय कस्टम नियंत्रण केवल डिजाइनर द्वारा समर्थित होते हैं जब या नियंत्रण का उपयोग करते हैं, लेकिन दोनों नहीं।

4

। क्लाइंट आईडी को जावास्क्रिप्ट में प्राप्त करने के लिए हुप्स के माध्यम से कूदना है।

यह अच्छा होगा अगर जीवन चक्र के रेंडर चरण ने एक स्क्रिप्ट बनाई जो प्रत्येक सर्वर नियंत्रण के लिए एक समान नाम के साथ एक var सेट स्थापित करता है जो स्वचालित रूप से क्लाइंट आईडी मान में प्रारंभ होता था। या शायद इस कार्रवाई को आसानी से ट्रिगर करने का कोई तरीका है।

हम्म ... मैं शर्त लगाता हूं कि मैं प्रतिबिंब के माध्यम से अपने लिए एक विधि स्थापित कर सकता हूं।

+1

मुझे यह नफरत है। ईश्वर का शुक्र है कि एमवीसी ढांचा इस अनावश्यक बनाता है। –

+0

कम से कम वीबीएनईटी में, आपके पास नौकरी पाने के लिए क्लासिक एएसपी डिलीमीटर का उपयोग करने का विकल्प है। यह सुंदर नहीं है, लेकिन यह काम करता है: फ़ंक्शन जेएसफ़ंक्शन() { var someElement = document.getElementById (<% = SomeControl.ClientId%>); ... } –

+1

मैं इसे सीधे .getElementById() कॉल में नहीं डालूंगा। मैं शीर्ष के पास एक वैश्विक स्क्रिप्ट रखना पसंद करता हूं जहां प्रत्येक नियंत्रण का उपयोग मैं अपने स्वयं के var को प्राप्त करता हूं, जिसे एक बार परिभाषित किया जाता है, क्लाइंट आईडी मूल्य के रूप में सेट किया जाता है। अगर वे सिर्फ मानक बनाते हैं तो वे बहुत परेशानी बचाएंगे। –

-5

(VB.NET) यदि आप किसी संपत्ति के गेट एक्सेसर के माध्यम से बाय्रैफ़ कीवर्ड के साथ किसी फ़ंक्शन में ऑब्जेक्ट भेजते हैं, तो यह वास्तव में संपत्ति के लिए सेट एक्सेसर का उपयोग करके ऑब्जेक्ट को अपडेट करने का प्रयास करेगा।

पूर्व:

UpdateName(ByRef aName as String)

UpdateName(Employee.Name) कर्मचारी का नाम संपत्ति पर सेट का उपयोग करके नाम को अपडेट करने का प्रयास करेंगे।

+3

यह एक अच्छी बात है- जिस तरह से होना चाहिए। –

7

सामान्य जीवन चक्र सामान्य रूप से।

कि मैं कुछ भी इसके साथ गलत दिखाई नहीं है, यह सिर्फ है कि आप लोग हैं, जो बड़े ASP.Net पर काम शुरू की संख्या पर चकित होगी है से पहले परियोजनाओं यह समझने, अन्य बातों के विपरीत। इसलिए, यह एक गोचा बन जाता है।

ध्यान दें कि मैंने कहा बड़े परियोजनाओं: मैं सबसे अच्छा तरीका है जीवन चक्र के साथ समझौता करने से मना करने के लिए लगता है कि कुछ छोटी परियोजनाओं अपने आप पर काम करने के लिए पहले, जहां यह बात इतना अगर तुम उन्हें ऊपर पेंच नहीं करता है ।

+0

+1 यह सामान्य रूप से सच है।मैं एक कदम आगे जाता हूं और सलाह देता हूं कि वे अपने कोडिंग/डिजाइन निर्णयों के दर्द को महसूस करने के लिए चारों ओर चिपके रहें। –

+0

अभी इस पर पढ़ने के लिए जा रहे हैं। – elbillaf

1

एक डेटा स्रोत नियंत्रण के बिना एक gridview का उपयोग करते समय (यानी सीधे नियंत्रित करने के लिए एक डाटासेट बंधन) आप के रूप में यहाँ दिखाया गया है मैन्युअल रूप से छंटाई और पेजिंग घटनाओं लागू करने की आवश्यकता:

http://ryanolshan.com/technology/gridview-without-datasourcecontrol-datasource/

3

मैं सिर्फ यह आज पता चला: ग्रिड व्यू और लिस्ट व्यू के साथ उपयोग की जाने वाली बाइंड() विधि मौजूद नहीं है। यह वास्तव में कुछ प्रतिबिंबित जादू को छुपा रहा है जो इसे एक Eval() और किसी प्रकार के परिवर्तनीय असाइनमेंट में बदल देता है।

इस का नतीजा यह है कि तरह कहता है:

<%# FormatNameHelper(Bind("Name")) %> 

कि पूरी तरह से वैध असफल हो जायेगी देखो। अधिक जानकारी के लिए this blog post देखें।

5

पेज_लोड नियंत्रण हैंडलर से पहले चलाया जाता है। तो आप किसी ईवेंट हैंडलर में परिवर्तन नहीं कर सकते हैं और फिर पेज लोड में उन परिवर्तनों का उपयोग कर सकते हैं। यह एक मुद्दा बन जाता है जब आपके पास मास्टर पेज (जैसे लॉगिन नियंत्रण) में नियंत्रण होता है। आप रीडायरेक्ट करके इस मुद्दे को हल कर सकते हैं, लेकिन यह निश्चित रूप से एक गोचाचा है।

1

लिंक: यदि आप लिंक-टू-एसक्यूएल का उपयोग कर रहे हैं, तो आप डेटा संदर्भ पर SubmitChanges() पर कॉल करते हैं और यह एक अपवाद फेंकता है (जैसे डुप्लिकेट कुंजी या अन्य बाधा उल्लंघन), अपमानजनक ऑब्जेक्ट मान आपकी स्मृति में रहते हैं जबकि आप डिबगिंग कर रहे हैं , और जब भी आप SubmitChanges() पर कॉल करेंगे, तब भी पुनः सबमिट किया जाएगा।

अब यहाँ असली किकर है: बुरा मान स्मृति में रहेगा भले ही आप अपने आईडीई में "रोक" बटन पुश और पुनः आरंभ! मुझे समझ में नहीं आता कि किसी ने सोचा कि यह एक अच्छा विचार क्यों था - लेकिन आपके सिस्टम ट्रे में पॉप अप करने वाला वह छोटा एएसपी.NET आइकन चल रहा है, और ऐसा लगता है कि यह आपके ऑब्जेक्ट कैश को सहेजता है। अगर आप अपनी मेमोरी स्पेस को फ्लश करना चाहते हैं, तो आपको उस आइकन पर राइट-क्लिक करना होगा और जबरन इसे बंद करना होगा! पकड़ लिया!

+0

यह आपके डेटाकॉन्टेक्स्ट का दुरुपयोग करने की तरह गंध करता है (इसके जीवनकाल को इसके विस्तार के लिए विस्तारित करता है)। साथ ही, संपादन-और-जारी करने को सक्षम करने का प्रयास करें। – ErikHeemskerk

2

यदि आप एएसपी.Net एप्लिकेशन के समान वर्चुअल निर्देशिका में क्लासिक एएसपी अनुप्रयोग चला रहे हैं, तो एप्लिकेशन पर मुट्ठी हिट एएसपी.Net पेज पर होनी चाहिए। यह सुनिश्चित करेगा कि ऐपपूल सही संदर्भ विन्यास के साथ बनाया जाए। यदि पहला पृष्ठ हिट होना क्लासिक एएसपी पृष्ठ है, तो परिणाम एप्लिकेशन से एप्लिकेशन में भिन्न हो सकते हैं। सामान्य रूप से AppPool को नवीनतम ढांचे का उपयोग करने के लिए कॉन्फ़िगर किया गया है।

2

दोहराना-जैसे नियंत्रण बनाना, और INamingContainer के बारे में नहीं जानना।

0

ढांचे में मौजूदा और विस्तारणीय कार्यक्षमता के ढेर से अनजान होना। अक्सर सदस्यता, सदस्यता, भूमिका, प्राधिकरण, साइट मानचित्र हैं। फिर नियंत्रण और संबंधित टैग हैं जिन्हें क्लाइंट आईडी के साथ समस्याओं को कम करने के लिए अनुकूलित किया जा सकता है। टेम्पलेट्स में ऑटो आयात नामस्थानों को स्वचालित रूप से .config फ़ाइल का सही ढंग से उपयोग करने और निर्देशिका आधार पर ऐसा करने में सक्षम होने के बारे में जानना आसान नहीं है। टैग भाव जैसे कम ज्ञात चीजें कई बार मूल्यवान भी हो सकती हैं।निश्चित रूप से, सभी ढांचे के साथ, एक सीखने की वक्र होती है और वांछित होने के लिए हमेशा कुछ छोड़ दिया जाता है, हालांकि अधिकतर अक्सर अपने आप को रोल करने के बजाय मौजूदा ढांचे को अनुकूलित और विस्तारित करना बेहतर नहीं होता है।

3

डीबगिंग एएसपी.Net की एक बहुत ही अच्छी सुविधा है, लेकिन जैसे ही आप ऐपकोड फ़ोल्डर में कुछ कोड बदलते हैं, तो आप एप्लिकेशन के पुन: निर्माण को ट्रिगर करते हैं, जिससे सभी सत्र खो जाते हैं।

यह बहुत कष्टप्रद प्राप्त कर सकते हैं, जबकि एक वेबसाइट को डीबग, लेकिन आप आसानी "StateServer मोड" का उपयोग कर इसे रोकने के कर सकते हैं: इसे शुरू करने के लिए सिर्फ एक सेवा और web.config में बदलने के लिए एक लाइन है: MSDN को देखें : http://msdn.microsoft.com/en-us/library/ms178586.aspx

  1. inproc मोड है, जो वेब सर्वर पर स्मृति में सत्र स्थिति संग्रहीत करता है। यह डिफ़ॉल्ट है।
  2. स्टेटसर्वर मोड, जो एएसपी.NET राज्य सेवा नामक एक अलग प्रक्रिया में सत्र स्थिति संग्रहीत करता है। यह सुनिश्चित करता है कि सत्र स्थिति संरक्षित है यदि वेब एप्लिकेशन पुनरारंभ होता है और वेब फार्म में कई वेब सर्वरों पर सत्र स्थिति भी उपलब्ध कराता है।
  3. एसक्यूएल सर्वर ...
  4. कस्टम ...
  5. बाहर!
+0

आप एक वेबसाइट के बजाय बस एक वेब एप्लिकेशन बना सकते हैं, जो इन समस्याओं में से कई को कम करता है। – ErikHeemskerk

2
  • आप अनुप्रयोगों के लिए जहां उपयोगकर्ता एक लंबा समय लग सकता के लिए session timeouts के बारे में चिंता करने की ज़रूरत।

  • तुम भी, बहुत बड़ी अनुप्रयोगों के लिए के बारे में चिंता करने की ज़रूरत uploading timeouts

  • Validatiors हमेशा डेटा प्रविष्टि त्रुटि के दृश्य के लिए अपने पृष्ठ स्क्रॉल नहीं हो सकता है (ताकि उपयोगकर्ता कभी यह नहीं देख सकते हैं और केवल आश्चर्य होगा क्यों सबमिट बटन पर काम करेंगे नहीं)

  • उपयोगकर्ता HTML चिन्हों में प्रवेश करती है, तो इस तरह के <, > (उदाहरण के लिए, P > 3.14), या किसी अन्य पृष्ठ पर एक inadvertant <br> कॉपी-पेस्ट से, ASP.NET will reject the page के रूप में और एक त्रुटि प्रदर्शित करते हैं।

  • null.ToString() एक बड़ी वसा त्रुटि उत्पन्न करता है। ध्यान से जांचें।

  • कई आवेदन भर में Session pool sharing एक आपदा चुपचाप एक माइग्रेन कि web.config और कई गूगल

  • ASP.NET के संभावित घंटे और शामिल होने के लिए

  • विभिन्न वातावरण के साथ मशीनों पर चारों ओर अनुप्रयोगों चलती इंतज़ार कर रहा है है यदि आप संग्रहीत प्रक्रियाओं का उपयोग करते हैं तो MySQL कैशिंग समस्याओं का सामना कर रहे हैं

  • AJAX भी एक गड़बड़ कर सकता है:

    • ऐसी स्थितियां हैं जहां ग्राहक पृष्ठ सत्यापन को बाईपास कर सकता है (विशेष रूप से सबमिट बटन दबाए जाने के बजाय ENTER दबाकर)।आप if(! Page.IsValid) { return ; }
    • एएसपी बटन को फोन करके इसे ठीक कर सकते हैं आमतौर पर UpdatePanels
    • अपने UpdatePanel में अधिक सामग्री, अधिक डेटा एसिंक्रोनस रूप से प्रसारित किया जाता है के अंदर सही ढंग से काम नहीं है, इसलिए अब इसे लेता है
    • लोड करने के लिए अपने AJAX के पैनल एक समस्या या किसी तरह की त्रुटि है, यह "ऊपर ताले" और अब और
0

नहीं एक शुद्ध ASP.NET बात यह अंदर की घटनाओं का जवाब नहीं है, लेकिन ...

मैं या तो ए) नेस्टेड चयन या बी का उपयोग करने की कोशिश कर रहा था) खंड के साथ और इसे काम करने के लिए नहीं मिल सका, लेकिन जो लोग स्पष्ट रूप से अधिक जानकार थे (जिनमें से कोई भी मैं काम करता हूं) ने मुझे बताया कि वाक्यविन्यास ठीक था। टर्न आउट ...

ओएलडीडीबी वाले लोगों में से किसी एक का उपयोग करने में सक्षम नहीं था।

OLEDB query to SQL Server fails

(इसके अलावा, मैं response.redirect() 'सुविधा' में कोशिश ... पकड़ ओपी में उल्लेख द्वारा बिट था! ग्रेट धागा!)

0

databound एक INamingContainer अंदर नियंत्रित करता है टेम्पलेट नियंत्रण जैसे फॉर्मव्यू के अंदर नियंत्रण नहीं रखा जाना चाहिए। उदाहरण के लिए this bug report देखें। चूंकि इनिंगकंटनर नियंत्रण उनके निहित नियंत्रणों के लिए अपना नामस्थान बनाता है, बाइंड() का उपयोग करके दो-तरफा डाटाबेसिंग ठीक से काम नहीं करेगा। लेकिन मूल्यों को लोड करते समय सब कुछ ठीक लगेगा (क्योंकि यह Eval() के साथ किया जाता है) यह उन मानों को वापस पोस्ट करने का प्रयास करने से पहले नहीं है जो वे रहस्यमय रूप से डेटाबेस में नहीं उतरेंगे।

यह बहुत अच्छी तरह से सवाल मुद्दे को दर्शाता है: AJAX Tabcontainer inside formview not inserting values

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