2009-07-28 12 views
33

से डेटा पास करने के लिए सर्वोत्तम प्रथाएं मैं एएसपी.नेट एमवीसी और जावास्क्रिप्ट/jQuery के साथ बहुत हाल ही में काम कर रहा हूं और मुझे लगता है कि मुझे हमेशा एक दिशा में जाना है जहां मुझे हमेशा पास करने की आवश्यकता है मेरे जावास्क्रिप्ट के लिए कुछ गतिशील मान "टू"। जब स्क्रिप्ट पेज में सही है, मैं इस तरह कुछ किया है:एएसपीनेट-एमवीसी से जावास्क्रिप्ट

var isEditable = <%=ViewData["editable"]%> 

मुझे पसंद है कि यह कैसे जल्दी & आसान और बस जैसे मैं HTML में एक मूल्य के इंजेक्षन होता है। लेकिन यह बदबू आ रही है। वास्तव में, वास्तव में बुरा है। और यह विजुअल स्टूडियो के इंटेलिजेंस और कोड स्वरूपण को तोड़ता है, जिससे मेरी लिपियों को पढ़ने और समझने में कठिनाई होती है।

यह मेरे लिए हुआ है एक और समाधान एक छिपी हुई फ़ील्ड के लिए अपने डेटा पास करने के, और जावास्क्रिप्ट संदर्भ कि है ...

<input type="hidden" id="editable" value="<%=ViewData["editable"]%>" /> 
var isEditable = $("#editable").attr("value"); 

यह शायद ज्यादा बेहतर है, क्योंकि यह स्क्रिप्ट को वैसे ही रखता होगा और मुझे इसे बाहरी .js फ़ाइल में स्थानांतरित करने की अनुमति होगी। लेकिन इस समाधान के बारे में कुछ भी आदर्श नहीं लगता है। या यह सिर्फ मैं हूं?

कोई भी आपकी स्क्रिप्ट में डेटा पास करने के लिए & समाधानों की अनुशंसा कर सकता है? क्या मैं गलत पथ का नेतृत्व कर रहा हूं यदि मेरी स्क्रिप्ट्स मेरे नियंत्रकों से पहले स्थान पर व्यूडाटा का भारी निर्भर करती हैं?

+1

AJAX के साथ नियंत्रक में किसी प्रकार के डेटा स्टोर में मॉडल से डेटा खींचने के बारे में कैसे? – Janie

+1

मुझे लगता है कि AJAX उन मामलों के प्रकार में अधिक होगा जो मैं जिक्र कर रहा हूं ... मेरी स्क्रिप्ट्स को आमतौर पर नियंत्रक/मॉडल (डेटा जो प्रारंभिक पृष्ठ निष्पादन पर पहले से मौजूद है) से डेटा के कुछ बिट्स को जानने की आवश्यकता है। एक और नेटवर्क कॉल जारी करने के लिए एक नियंत्रक वापस थोड़ा सा लगता है। –

उत्तर

11

मैं कभी कभी एक JSON serializer के माध्यम से पृष्ठ के लिए एक config वस्तु लिख कर अपने पृष्ठों को डेटा पास:

var pageConfig = <%= ServerConfig.ToJson() %>; 

आप कहाँ ToJson विधि अपने आप को लिखने के लिए की जरूरत है। यह पृष्ठ स्थिति को अच्छी तरह निहित रखता है, ताकि केवल एक ही स्थान हो जहां आप सर्वर मान इंजेक्ट करते हैं। यहां से सबकुछ शुद्ध जावास्क्रिप्ट है। अपने उदाहरण में, आप तो कर सकता है:

var isEditable = pageConfig.isEditable; 

एक बाहरी जे एस फ़ाइल में भी, अगर pageConfig वैश्विक है। उस स्थिति में, हालांकि, आपको इसे ठीक से नामस्थान करना चाहिए: MY_APP.pageConfig शायद।

+0

क्या यह चचेबिलिटी को प्रभावित नहीं करता है?कम से कम प्रत्येक पृष्ठ पर एक अलग पृष्ठ (विभिन्न विन्यास) वापस कर सकते हैं। प्रॉक्सी सर्वर में कैश के संदर्भ में सोचते समय, अब आपके पास प्रत्येक उपयोगकर्ता के लिए उस पृष्ठ का एक अलग संस्करण होगा। क्या यह बिल्कुल चिंता का विषय है? –

+0

यह एक दिलचस्प विकल्प है, लेकिन मुझे यकीन नहीं है कि मैं समझता हूं कि आप इस सर्वर कॉन्फिग क्लास को कैसे कार्यान्वित कर रहे हैं। दरअसल प्रत्येक पृष्ठ जीईटी डेटा का एक अलग सेट वापस कर सकता है, तो क्या पृष्ठ को अंतिम पृष्ठ पर प्रत्येक पृष्ठ के व्यूडेटा से सेट करने की आवश्यकता नहीं होगी? भले ही, आपके अन्य सुझाव कुछ हैं जो मैं निश्चित रूप से कोशिश/विचार करूंगा (जेसन और एक वैश्विक जेएस चर) - धन्यवाद! –

+0

@ कर्ट - हाँ, मुझे लगता है कि आपको इसे व्यूडेटा (शायद एक अनाम प्रकार के रूप में) से बनाना होगा। मेरा मतलब यह नहीं था कि आप व्यूडेटा से छुटकारा पा सकते हैं, लेकिन आप पेज पर सर्वर डेटा इंजेक्ट करने वाले स्थानों की संख्या सीमित कर सकते हैं। –

0

आप उस जानकारी को एक या दूसरे तरीके से इंजेक्ट करने जा रहे हैं। और आईएमओ, आपका पहला उदाहरण दूसरे से वास्तव में अलग नहीं है।

एक और समाधान जेएस क्लास (या प्रोटोटाइप?) होना है जो विकल्प ऑब्जेक्ट को स्वीकार करेगा। हालांकि स्वीकार्य रूप से, यह आपके द्वारा दिए गए उदाहरणों से वास्तव में अलग नहीं है। लेकिन फिर भी, शायद आप इस तरह से जाना चाहते हैं।

$(function() { 
    myClass.init({ isEditable: <%=ViewData["editable"]%>, 
     another: '<%=ViewData["another"]%>' }); 
}); 
0

मुझे लगता है कि @ çağdaş एक अच्छा बिंदु बनाता है, लेकिन सर्वर पक्ष को भी जांचना याद रखें। यदि आप "केवल पढ़ने के लिए" फ़ील्ड सेट करते हैं तो उपयोगकर्ता को उस ध्वज को संशोधित करने, केवल पढ़ने-योग्य फ़ील्ड को बदलने और सबमिट करने से रोकने के लिए कुछ भी नहीं है।

0

अजाक्स का पूरा व्यवसाय लोड जानकारी असीमित रूप से है। यदि आप अजाक्स की नौकरी कर रहे हैं (जानकारी लोड कर रहे हैं और इसे एक चर में रखते हैं), तो इससे बिजली दूर हो रही है। आप JQuery का प्रयास क्यों नहीं करते हैं और इसका अजाक्स का उपयोग नहीं करते हैं, या सामग्री को गतिशील रूप से लोड करने के लिए फ़ंक्शन प्राप्त करें। यह आपके पृष्ठ को तेज़ी से लोड करने में मदद करेगा।

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