2010-05-17 15 views
5

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

मुझे पता है कि इस तरह के फॉर्म को कैसे उत्पन्न किया जाए, लेकिन मैं यह नहीं समझ सकता कि मैं इन पंक्तियों में से प्रत्येक को आसानी से कैसे संसाधित कर सकता हूं। मैं यह भी जानता हूं कि प्रत्येक फ़ील्ड को name="order-23" या name="order[23]" जैसे अद्वितीय पहचानकर्ता को कैसे देना है, लेकिन मैं उस नाम का अनुवाद कैसे कर सकता हूं ताकि मैं डेटाबेस में संबंधित रिकॉर्ड अपडेट कर सकूं?


संपादित करें: एक समाधान मैं के बारे में सोच सकते हैं FormCollection में के माध्यम से हर प्रपत्र क्षेत्र पुनरावृति करने के लिए होगा, और यदि फ़ील्ड का नाम नमूने का मिलान, तो मुझे लगता है कि से नंबर निकाल देंगे क्षेत्र का नाम और इसे संसाधित करें।
हालांकि, मुझे लगता है कि इसके बारे में जाने का एक आसान तरीका होना चाहिए - इस विधि में प्रत्येक फ़ील्ड पर स्ट्रिंग प्रोसेसिंग का एक उचित हिस्सा शामिल होगा, और यदि संभवतः मुझे प्रत्येक पंक्ति के लिए अतिरिक्त फ़ील्ड जोड़ना पड़ता है तो संभवतः गिर जाएगी बाद में।

+1

नकली के लिए +1, यह अच्छा है :) –

+2

@codeka - मैंने बाल्समीक मॉकअप का उपयोग किया - यह एक महान कार्यक्रम –

उत्तर

1

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

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

+0

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

+0

मैंने दोनों का थोड़ा सा प्रदर्शन किया - मैं डेटाबेस से प्रत्येक ऑर्डर पुनर्प्राप्त करता हूं, और उसके बाद ऑर्डर-आईडी का उपयोग फॉर्मकॉलेक्शन में अपना मान एक्सेस करता हूं - I http://stackoverflow.com/ में प्रस्तुत विधि पर आंशिक रूप से मेरा समाधान आधारित है। प्रश्न/762,825/कैसे-कर सकते हैं-एक-formcollection होने वाली प्रगणित-इन-एएसपी निवल MVC/763,952 # 763,952 –

0

यदि आपके पास नाम हैं, तो बस Request.Form ["order-23"] का उपयोग करके मानों को पढ़ें या पेज प्री-इनिट में नियंत्रण दोबारा बनाएं और आपके पास अपने सहेजने वाले मानों तक पहुंच होगी सीधे बनाए गए नियंत्रणों के माध्यम से घटना।

0

मैंने अपने सीएमएस में यह भार किया है।

अनिवार्य रूप से मैं धोखाधड़ी की तरह।

विचार कुछ इस तरह है ....

ग्राहक के लिए प्रपत्र प्रस्तुत करना है, तो gneerated स्रोत कोड को देखो। आपको देखना चाहिए कि यह एक एक्शन विशेषता के साथ एक फॉर्म टैग जेनरेट किया गया है।

आप सबमिट बटन पर फार्म का है कि यूआरएल को भेजा जाएगा क्लिक करते हैं तो एक आदेश प्रस्तुत करने के मामले में आप पेज वापस करने के लिए पोस्ट करेंगे OrderPage.aspx? OrderID = xxxx

तो सर्वर पर क्या तुम करोगी अपने डाटाबेस के लिए एक अद्यतन बयान है कि कुछ की तरह निहित ...

निर्माण "अपडेट आदेश जहां आदेश आईडी =" + request.querystring [ "OrderID"]

तो आपको कैसे कार्रवाई अपडेट करते हैं ...

कॉलिंग पेज ले में टीएस का कहना है कि आपके पास "नया ऑर्डर" नामक एक लिंक है, जब उस लिंक पर क्लिक किया जाता है तो आपको 2 चीजें करने की आवश्यकता होती है ...

  1. इस पृष्ठ पर रीडायरेक्ट करें।
  2. इस नए आदेश के लिए ऑर्डर आईडी उत्पन्न करें।

ठीक है पहला आसान है, बस इसे इस पृष्ठ से लिंक करें।

दूसरा ...

यदि यह पृष्ठ कोई पोस्टबैक नहीं है, तो (यदि IsPostback) {/ * एक नया आईडी प्राप्त करें * /} आपके ऑर्डर आईडी के आधार पर इसमें एक नया guid उत्पन्न करना या किसी सूची में अगली संख्या प्राप्त करना शामिल हो सकता है एक डीबी से एक अधिकतम अधिकतम (आईडी) कर रहे हैं।

एक बार आपके पास यह नई आईडी है तो आपको अभी भी पेज_लोड ईवेंट में होना चाहिए।

this.form.Action = this.form.Action + "? OrderId =" + yourNewOrderId;

... tada ...

क्लाइंट को वापस पृष्ठ भेजें।

स्रोत देखें।

+0

ओह मैं जोड़ना भूल गया, जब यह पृष्ठ सबमिट बटन को मारने वाले उपयोगकर्ता द्वारा पोस्टबैक किया गया है तो यह वापस सबमिट करेगा सर्वर और Request.QueryString ["OrderId"] में आपकी नई जेनरेट की गई ऑर्डर आईडी और भरे हुए फॉर्म फ़ील्ड्स शामिल होंगे, निश्चित रूप से आप सामान्य तरीके से प्रक्रिया करते हैं। – War

+0

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

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