2010-09-30 10 views
6

से सभी चयनित चेकबॉक्स प्राप्त करना मेरे पास एक ऐसा फॉर्म है जिसमें चेकबॉक्स और पूरे प्रकार के नियंत्रण का पूरा समूह भी शामिल है। मुझे प्रत्येक चयनित चेकबॉक्स के नाम पुनर्प्राप्त करने की आवश्यकता है।फॉर्मकॉलेक्शन

ऐसा करने का सबसे अच्छा तरीका क्या है? क्या मैं इसे एक linq क्वेरी के साथ कर सकता हूँ?

var names = formCollection 
       .Where(c => c is Checkbox && c.Checked) 
       .Select(c => c.Name); 

अद्यतन ऐसा लगता है जिस तरह से MVC प्रस्तुत चेक बॉक्स कैसे एक सामान्य रूप से व्यवहार करते हैं से अलग है, के रूप में एक छिपी हुई फ़ील्ड है:

तो स्यूडोकोड में, मैं इस तरह कुछ करने के लिए देख रहा हूँ भी प्रस्तुत किया। मुझे यहां विवरण मिले: How to handle checkboxes in ASP.NET MVC forms?

कोई भी, मुझे यह थ्रेड की मदद से और बिल्डस्टार्ट से उत्तर के साथ काम मिल गया है। निम्नलिखित कोड चाल है।

var additionalItems = form.AllKeys 
     .Where(k => form[k].Contains("true") && k.StartsWith("addItem")) 
       .Select(k => k.Substring(7)); 
+0

उस जानकारी के लिए धन्यवाद। मैं आम तौर पर बस निर्मित बाध्यकारी मॉडल का उपयोग करता हूं और वास्तव में विस्तार से नहीं देखा कि चेकबॉक्स के संबंध में एचटीएमएल में आउटपुट क्या है। – Buildstarted

उत्तर

5

दुर्भाग्यवश इस प्रकार की जानकारी संग्रह में उपलब्ध नहीं है। लेकिन यदि आप <input type='checkbox' name='checkbox_somevalue' /> की तरह कुछ के साथ अपने सभी चेक बॉक्स पहले जोड़ें तो आप के बाद से ही जाँच मूल्यों वापस तैनात किया जाएगा जिन्हें आप सत्यापित करना है कि वे जाँच कर रहे हैं की जरूरत नहीं है की तरह

var names = formCollection.AllKeys.Where(c => c.StartsWith("checkbox")); 

एक प्रश्न चला सकते हैं।

यहाँ एक है कि पकड़ लेता है केवल जाँच मूल्यों

var names = formCollection.AllKeys.Where(c => c.StartsWith("test") && 
         formCollection.GetValue(c) != null && 
         formCollection.GetValue(c).AttemptedValue == "1"); 
+0

मुझे निश्चित रूप से चेक किए गए सभी चेकबॉक्स वापस पोस्ट किए जा रहे हैं। – fearofawhackplanet

+0

यह अजीब बात है। एक त्वरित परीक्षण से पता चलता है कि यह मामला नहीं है। हो सकता है कि विशिष्ट एचटीएमएल हो। लेकिन '<इनपुट प्रकार =' चेकबॉक्स 'नाम =' somename '/> 'फ़ॉर्म मेरे लिए काम नहीं कर रहा है। हालांकि मैंने जवाब – Buildstarted

+0

अद्यतन किया है, मुझे अभी पता चला है। कुछ और विवरणों के साथ मेरा प्रश्न अपडेट किया गया। आपकी सहायता के लिए धन्यवाद :) – fearofawhackplanet

0

इस पुराने सवाल वर्षों के लिए सक्रिय नहीं में से एक है, लेकिन मैं इस पर ठोकर खाई है। मेरी समस्या यह थी कि मेरे पास चेक बॉक्स की एक सरणी है - मान लें कि नाम 'IsValid' है और प्रत्येक चेक बॉक्स की स्थिति प्राप्त करना चाहता था (मेरी परियोजना एमवीसी 5 में थी)। प्रपत्र पर पोस्ट छिपी हुई फ़ील्ड मूल्य भी जाँच चेक बॉक्स के साथ तैनात किया गया था मैं प्रपत्र संग्रह का पाश किया था और के रूप में मान मिला प्रस्तुत ...

if (key.Contains("IsValid")) 
        sV = (string[])collection.GetValue(key.ToString()).RawValue; 

के बाद से फार्म पर; सरणी में केवल चेक किए गए चेक बॉक्स के लिए 'झूठी' का एक अतिरिक्त मान था। उनसे छुटकारा पाने के लिए मैंने निम्नलिखित फ़ंक्शन का उपयोग किया; मुझे उम्मीद है कि यह किसी की मदद करेगा और यदि मेरा दृष्टिकोण गलत है तो एक बेहतर समाधान भी मेरे लिए सहायक होगा!

sV = FixCheckBoxValue(sV); 

     private string[] FixCheckBoxValue(string[] sV) 
    { 
     var iArrayList = new List<string>(sV); 

     for (int i = 0; i < iArrayList.Count; i++) 
     { 
      if (iArrayList[i].ToString() == "true") 
      { 
       iArrayList.RemoveAt(i + 1); 
      }     
     } 
     return iArrayList.ToArray(); 
    }