.NET

2010-05-05 11 views
16

में HTTP अनुरोध में सरणी मानों को पास करना .NET में HTTP अनुरोध में किसी सरणी को पास करने और संसाधित करने का मानक तरीका क्या है? मेरे पास एक समाधान है, लेकिन मुझे नहीं पता कि यह सबसे अच्छा तरीका है या नहीं।.NET

<form action="myhandler.ashx" method="post"> 
    <input type="checkbox" name="user" value="Aaron" /> 
    <input type="checkbox" name="user" value="Bobby" /> 
    <input type="checkbox" name="user" value="Jimmy" /> 
    <input type="checkbox" name="user" value="Kelly" /> 
    <input type="checkbox" name="user" value="Simon" /> 
    <input type="checkbox" name="user" value="TJ" /> 

    <input type="submit" value="Submit" /> 
</form> 

ashx हैंडलर अल्प विराम द्वारा सीमांकित स्ट्रिंग के रूप में "उपयोगकर्ता" पैरामीटर प्राप्त करता है:

यहाँ मेरी समाधान है।

public void ProcessRequest(HttpContext context) 
    { 
     string[] users = context.Request.Form["user"].Split(','); 
    } 

तो, मैं पहले से ही मेरी समस्या का जवाब है:: आप स्ट्रिंग विभाजित करके मूल्यों को आसानी से प्राप्त कर सकते हैं एक ही पैरामीटर नाम करने के लिए एक से अधिक मान असाइन करते हैं, मान ashx हैंडलर अल्प विराम द्वारा सीमांकित स्ट्रिंग के रूप में यह प्राप्त करता है , और स्ट्रिंग विभाजित करें। मेरा सवाल यह है कि यह आमतौर पर .NET में किया जाता है या नहीं।

इसके लिए मानक अभ्यास क्या है? क्या यह मानने के मुकाबले कई मूल्यों को पकड़ने का एक आसान तरीका है कि मूल्य अल्पविराम-सीमित है और उस पर स्प्लिट() को कॉल कर रहा है? क्या यह आमतौर पर .NET में सरणी पास की जाती है, या इसके बजाय XML का उपयोग किया जाता है?

क्या किसी के पास कोई अंतर्दृष्टि है कि यह सबसे अच्छा तरीका है या नहीं?

उत्तर

32

वास्तव में कोई मानक नहीं है, लेकिन आप इसका उपयोग कर रहे हैं।

हालांकि, मान वास्तव में को अल्पविराम से अलग स्ट्रिंग के रूप में भेजे गए हैं, उन्हें एक ही नाम के साथ अलग-अलग मान के रूप में भेजा जाता है। अपने उदाहरण से प्रपत्र डेटा इस तरह दिखेगा:

string[] users = context.Request.Form.GetValues("user"); 

आप Form["user"] का उपयोग करते हैं तो यह आपको और आप के लिए मूल्यों को श्रेणीबद्ध देगा:

user=Aaron&user=Bobby&user=Jimmy&user=Kelly&user=Simon&user=TJ 

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

+0

धन्यवाद, यह वही जानकारी है जिसे मैं ढूंढ रहा था। तो .NET Framework एक सरणी के समान नाम के HTTP पैरामीटर मान पढ़ने के लिए पर्याप्त स्मार्ट है, और मेरे पास GetValues ​​() या अनुक्रमण के माध्यम से अल्पविराम-सीमित स्ट्रिंग के रूप में इसे सरणी के रूप में प्राप्त करने का विकल्प है। –

+0

धन्यवाद। यह बहुत उपयोगी है मुझे सूची उपयोग मिला है। –

2

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

+2

नहीं, आपको HTML फॉर्म से अल्पविराम से अलग मूल्य नहीं मिलते हैं। यह 'Request.Form' संग्रह है जो मानों को जोड़ता है यदि आप उन्हें एक मूल्य के रूप में पूछते हैं। – Guffa

+0

हां - आप निश्चित रूप से सही हैं। स्पष्टीकरण के लिए Thanx। मैं इस बात का जिक्र कर रहा था कि इन मानों को आम तौर पर एएसपीनेट में एक्सेस किया जाता है और मैंने फ्रेमवर्क हमारे लिए किए गए परिवर्तन की व्याख्या नहीं की है। – Ray

+0

टिप के लिए धन्यवाद। –