2010-12-13 9 views
6

में लचीली वेब फॉर्म कैसे बनाएं I am.net का उपयोग कर रहा हूं और मुझे एक ऐसा एप्लिकेशन बनाने की आवश्यकता है जहां हम आसानी से डेटाबेस को पुनर्निर्माण किए बिना फॉर्म बना सकते हैं, और अधिमानतः बिना निर्माण/पढ़/अपडेट/हटाए प्रश्नों। लक्ष्य ग्राहकों को अपने स्वयं के रूपों को ड्रॉपडाउन, टेक्स्टबॉक्स, चेकबॉक्स, अन्य-से-एक रिश्ते को किसी अन्य सरल रूप (जो इसे खींच रहा है) के साथ बनाने की अनुमति देना है। उपयोगकर्ता को स्वयं फॉर्म बनाने में सक्षम नहीं होना चाहिए, लेकिन जब भी कोई नया फॉर्म अनुरोध/संशोधित होता है, तो मैं टेबल, फ़ील्ड्स, प्रश्न, वेब पेज इत्यादि जोड़ना नहीं चाहता हूं।एएसपी.नेट

2 प्रश्न: 1) मैं ऐसा करने के लिए एक लचीला डेटाबेस कैसे बना सकता हूं (SQL सर्वर में)? मैं दो तरीकों से सोच सकता हूं: ए) प्रत्येक डेटाटाइप (int, वर्कर (एक्स), smalldatetime, बिट, आदि के लिए एक टेबल बनाएँ)। पर्याप्त प्रश्न बनाने के लिए यह बहुत मुश्किल होगा। बी) उपयोगकर्ता को 5 पूर्णांक या 5 दिनांक फ़ील्ड की आवश्यकता होने पर कई अतिरिक्त फ़ील्ड और विभिन्न डेटाटाइप के साथ फॉर्म तालिका बनाएं। यह सबसे आसान लगता है, लेकिन शायद अंतरिक्ष का बहुत अक्षम उपयोग है।

2) मैं फॉर्म कैसे बना सकता हूं? मैंने एक एक्सएमएल शीट बनाने के बारे में सोचा था जिसमें एक सूची के रूप में सत्यापन, डेटा प्रकार, प्रदर्शन करने के लिए नियंत्रण आदि था। फिर मैं फ्लाई पर फॉर्म बनाने के लिए एक्सएमएल के माध्यम से पार्स करूंगा। शायद लेआउट करने के लिए सीएसएस का उपयोग करना (जो मैनुअल होना चाहिए, जो ठीक है)।

क्या कोई बेहतर/सर्वोत्तम तरीका है? क्या वहां कुछ ऐसा है जो मैं विचार पाने के लिए देख सकता था? किसी भी प्रकार की मदद की बेहद सराहना की जाती है।

उत्तर

3

यह एक InfoPath समाधान के लिए संभावित उम्मीदवार की तरह लगता है। पहले ब्लश पर, यह आपके द्वारा पूछे जाने वाले अधिकांश/अधिकांश कार्य करेगा।

यह आलेख एक SQL डेटा स्रोत पर आधारित एक InfoPath फ़ॉर्म बनाने का एक संक्षिप्त अवलोकन देता है।

http://office.microsoft.com/en-us/infopath-help/design-a-form-template-based-on-a-microsoft-sql-server-database-HP010086639.aspx

मैं का निर्माण किया है आप की तरह एक पूरी तरह से कस्टम समाधान का वर्णन कर रहे हैं, और अगर मैं कभी इसे फिर से किया था मैं शायद या तो 1) एक तीसरे पक्ष के उत्पाद के लिए चुनते हैं 2) कम कार्यक्षमता होगा। आप अपने सेट का 9 0% फीचर सेट के 10% पर काम कर सकते हैं।

संपादित करें: अपने प्रश्नों को दोबारा पढ़ें और यहां अतिरिक्त प्रतिक्रिया है।

1 - लचीला डेटा संरचना: ध्यान में रखने के लिए कुछ चीजें प्रदर्शन और डेटा के खिलाफ रिपोर्ट लिखने की क्षमता हैं। अधिक सामान्य डेटा संरचना, इन्हें हासिल करना कठिन होगा (फिर से, अनुभव से बोलना)।

दोनों प्रदर्शन करने के लिए कुछ हद तक इसके विपरीत तथा रिपोर्ट-तत्परता, माइक्रोसॉफ्ट SharePoint अधिकतम लचीलापन के लिए सामान्य तालिकाओं में एक्सएमएल टुकड़े/दस्तावेजों का उपयोग करता है। मैं शेयरपॉइंट की विशेषताओं के साथ बहस नहीं कर सकता, इसलिए यह काम पूरा हो जाता है और डेटा संरचना को बहुत सरल बनाता है। एक्सएमएल सही तरीके से करने पर अच्छा प्रदर्शन करेगा, लेकिन अधिकांश लोगों को एक्सएमएल के खिलाफ प्रश्न लिखना अधिक कठिन लगेगा। हालांकि एक्सएमएल एसक्यूएल सर्वर के लिए "प्रथम श्रेणी नागरिक" है, फिर भी यह एक अनुकूलित तालिका संरचना के साथ-साथ प्रदर्शन भी कर सकता है या नहीं।

2 - फॉर्म: मैंने एक्सएसएलटी द्वारा एक्सएमएल का उपयोग करके कस्टम फॉर्म लागू किए हैं। एक्सएमएल अक्सर फॉर्म संरचना को स्टोर करने के लिए एक अच्छा विकल्प है; एक्सएसएलटी खुद के लिए एक राक्षस है, लेकिन यह बहुत शक्तिशाली है। इसके लायक होने के लिए, इन्फोपाथ एक्सएमएल के रूप में अपनी फॉर्म संरचना को स्टोर करता है।

मैंने .NET में कस्टम नियंत्रणों का उपयोग करके गतिशील रूपों को भी कार्यान्वित किया है। यह एक बहुत ही ऑब्जेक्ट उन्मुख दृष्टिकोण है, लेकिन (यूआई की जटिलता के आधार पर) को कोड की एक महत्वपूर्ण मात्रा की आवश्यकता हो सकती है।

आखिरकार (फिर से एक उदाहरण के रूप में शेयरपॉइंट का उपयोग कर), माइक्रोसॉफ्ट ने शेयरपॉइंट 2007 में बेहद जटिल XML सूची/फॉर्म परिभाषाओं को लागू किया। जटिलता कई लाभों को हरा देती है। दूसरे शब्दों में, यदि आप एक्सएमएल रूट जाते हैं, तो अपनी संरचनाओं को साफ और सरल बनाएं या आपके हाथों पर रखरखाव दुःस्वप्न होगा।

संपादित करें # 2: स्कॉट के प्रश्न के संदर्भ में, यहां एक उच्च स्तरीय डेटा संरचना है जो डुप्लिकेट डेटा से बच जाएगी और अधिकांश प्रारूप परिभाषा के लिए एक्सएमएल पर भरोसा नहीं करती है।

चेतावनी: मैं सिर्फ इस डिजाइन एक साथ रखा एसक्यूएल प्रबंधन स्टूडियो में ... मैं केवल 10 मिनट इस पर खर्च; एक लचीला रूप प्रणाली विकसित करना एक मामूली कार्य नहीं है, इसलिए यह एक अति-सरलीकरण है। यह उपयोगकर्ता द्वारा दर्ज डेटा के भंडारण को संबोधित नहीं करता है, केवल फॉर्म की परिभाषा।

alt text

टेबल:

फॉर्म - जो होता है (जैसा कि आप अनुमान लगा होता है) शीर्ष स्तर के रूप तालिका फ़ील्ड प्रपत्र शामिल का संग्रह।

फ़ील्ड - जेनेरिक फ़ील्ड जिन्हें फ़ॉर्म भर में पुन: उपयोग किया जा सकता है। उदाहरण के लिए, आप 50 अलग-अलग रूपों के लिए 50 अलग-अलग "अंतिम नाम" फ़ील्ड नहीं चाहते हैं। "DataTypeId" कॉलम पर ध्यान दें। आप इस कॉलम में "नंबर," फ्री टेक्स्ट "जैसे किसी भी प्रकार को स्टोर कर सकते हैं, यहां तक ​​कि एक मान जो इंगित करता है कि उपयोगकर्ता को सूची से चुनना चाहिए।

फॉर्मफ़िल्ल्ड - इसमें एक फॉर्म को 0-फ़ील्ड शामिल करने की अनुमति देता है परिभाषा। आप यह तालिका भी विस्तारित कर सकते हैं यह इंगित करने के लिए कि उपयोगकर्ता इस क्षेत्र में से कई को जोड़ सकते हैं।

बाधा - मूल रूप से एक लुकअप तालिका जो एक बाधा प्रकार को परिभाषित करती है (शायद यह अधिकतम लंबाई, अधिकतम घटनाएं, आवश्यक है, इत्यादि)

फॉर्मफ़िल्ल्डकोनस्ट्रेन - एक फॉर्म फ़ील्ड के किसी विशेष उदाहरण के लिए एक बाधा से संबंधित है। यह तालिका एक विशिष्ट फ़ील्ड को विशिष्ट बाधा के साथ एक विशिष्ट फ़ील्ड के साथ जोड़ती है। मेटाडेटा कोलम नोट करें n; एक्सएमएल के लिए बाधा के विनिर्देशों को स्टोर करने के लिए यह संभवतः एक अच्छा उपयोग होगा।

अनिवार्य रूप से, मैं सुझाव देता हूं कि सामान्यीकृत डेटाबेस को कम या कोई शून्य मान और कोई डुप्लिकेट डेटा न हो। जैसा कि मैंने वर्णन किया है, एक संरचना आपको उस लक्ष्य के रास्ते पर ले जाएगी।

+0

धन्यवाद। 1) मैं xml में सभी डेटा स्टोर करने के लिए परेशान होगा। जहां तक ​​सामान्य डेटा संरचना, मैंने सूचीबद्ध दो विकल्पों (ए और बी) में से कौन सा कठिन होगा? मुझे लगता है कि बी आसान समाधान होगा। इस बात से सहमत? 2) मुझे फॉर्म के लिए बेहतर (स्वच्छ) एक्सएमएल बेहतर और बेहतर विचार पसंद है, मुझे एक्सएसएलटी में देखना होगा, मुझे इसके बारे में बहुत कुछ पता नहीं है। मुझे यह जानकर उत्सुकता है कि आपने .NET में कस्टम नियंत्रण कैसे बनाया। मैं उपयोगकर्ता नियंत्रण बनाने के बारे में सोच रहा था (टेक्स्टबॉक्स, ड्रॉपडाउन, आदि के लिए एक), लेकिन आप डीबी को पढ़ने/लिखने के लिए लिंक कैसे बनाते हैं? – scojomodena

+0

@ स्कॉट जे - कृपया मेरी अपडेट की गई पोस्ट देखें। मैंने एक उदाहरण पोस्ट किया है जिसे आप विकल्प बी में उल्लेख कर रहे डुप्लिकेशन को खत्म कर सकते हैं। कस्टम नियंत्रण के संबंध में ... उपयोगकर्ता नियंत्रण भी ठीक काम करेगा, जब तक कि आपको उन्हें असेंबली में साझा करने की आवश्यकता न हो। प्रत्येक नियंत्रण को शायद एक सामान्य इंटरफ़ेस लागू करना चाहिए जो उन्हें डेटा के साथ पॉप्युलेट करने और उनके द्वारा एकत्रित डेटा प्राप्त करने की अनुमति देता है। ये नियंत्रण अभिभावक पृष्ठ/नियंत्रण पर रखे जाएंगे, जो समझते हैं कि उनसे डेटा एकत्रित करने और इसे व्यवसाय स्तर पर कैसे पारित किया जाए। इनपुट के लिए –

1

मुझे लगता है कि यदि आपको डेटाबेस में सहेजे गए वास्तव में गतिशील रूपों की आवश्यकता है, तो आपको एक "शब्दकोश" डेटा तालिका बनाना होगा।

उदाहरण के लिए ...

UserForms 
--------- 
FormID 
FieldName 
FieldValue 

FormID वापस माता पिता प्रपत्र (ताकि आप एक फार्म के लिए क्षेत्रों के सभी समेकित कर सकते हैं। FieldName से प्रवेश किया पाठ क्षेत्र का नाम है से संबंधित है। FieldValue है मूल्य उस क्षेत्र के लिए चयनित प्रवेश किया /।

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

फिर भी, उम्मीद है कि यह देता है आप कहीं सोचने शुरू करने के लिए आप चीजों को कैसे पूरा करना चाहते हैं इसके बारे में। सौभाग्य!

पीएस डायनामिक फॉर्म पीढ़ी करते समय मुझे कुल दर्द होने के लिए .NET के साथ वेबफॉर्म का उपयोग करना पड़ा है। उदाहरणों में मुझे यह करना पड़ा, मैंने इसे लगभग पूरी तरह से हटा दिया और मूल HTML तत्वों का उपयोग किया। फिर Request से आवश्यक मानों का उपयोग करके मेरे फॉर्म को दोबारा शुरू किया। शायद एक सही समाधान नहीं है, लेकिन यह मेरे लिए सबसे अच्छा काम किया।

+0

यदि मैं इसे लागू करता हूं, तो "fieldvalue" के लिए डेटा प्रकार क्या होगा? सभी स्ट्रिंग डेटा नहीं हो सकता है। यह मेरा मूल विचार था, लेकिन "फ़ील्डनाम" फ़ील्ड प्रत्येक रिकॉर्ड के लिए बेहद अनावश्यक होगा। मुझे यह जानकर उत्सुकता है कि आपने नेटिव एचटीएमएल फॉर्म कैसे किया। कोई उदाहरण या स्टार्टर कोड है जिसे मैं बैकएंड को कार्यान्वित करने के विचारों के लिए देख सकता हूं? – scojomodena

+0

डेटाटाइप पर कोई विचार नहीं। हालांकि इसके बारे में सिर्फ एक विचार था ... यह संभव है कि आप अपने पूरे फॉर्म को JSON पर क्रमबद्ध कर सकें और इसे एक एकल (अभी तक बड़ी) स्ट्रिंग डेटाटाइप में सहेज सकें। सी # के लिए आप बहुत सारे JSON serializers/deserializers प्राप्त कर सकते हैं। – jocull

+0

जहां तक ​​"मूल रूप" चला जाता है, यह लगभग उतना ही जटिल नहीं है जितना लगता है। बस HTML में सादा रूपों के साथ फ़ॉर्म बनाएं, और फिर पोस्ट किए गए फॉर्म से डेटा प्राप्त करने के लिए अनुरोध ["myfieldname"] का उपयोग करें। यदि आपके पास कई शीर्षक या कुछ जैसे दोहराने वाले फ़ील्ड हैं, तो आप उन्हें खोजने के लिए एक प्रत्यय (myfieldname_1, myfieldname_2) और लूप को अनुरोध कर सकते हैं। यह अनुरोध करने के लिए अनुरोध है। (यह वास्तव में Request.AllKeys, वास्तव में) हो सकता है। प्रतिक्रिया के लिए – jocull

0

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

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

विभिन्न मूल्य प्रकारों का समर्थन करने के लिए, हमें हमारी उत्तर तालिका (उत्तरधर, उत्तरडेट, उत्तर INT, उत्तरडिमल) पर एकाधिक उत्तर फ़ील्ड बनाना पड़ा। इनमें से प्रत्येक मानचित्र एक या अधिक फ़ील्ड प्रकार (दिनांक, समय, संख्या, आदि) में है। यूआई में मान का प्रतिनिधित्व करने के लिए प्रत्येक फ़ील्ड प्रकार का अपना तर्क होता है, और मूल्य को हमारे उत्तर ऑब्जेक्ट्स पर उपयुक्त प्रॉपर्टी में डाल दिया जाता है।

सब कुछ, यह बहुत काम रहा है। यह हमारे लिए लायक है, क्योंकि यह उत्पाद का क्रूक्स है, लेकिन आप निश्चित रूप से इस तरह की परियोजना शुरू करने से पहले लागत को ध्यान में रखना चाहते हैं।

+0

धन्यवाद। यह हमारे उत्पाद का भी क्रूक्स होगा। यह सही करने के लिए यह लायक होगा। – scojomodena