2010-04-11 15 views
15

को देखते हुए कई HTML चेक बॉक्स:FormCollection तत्व से अधिक चेकबॉक्स हो रही

<input type="checkbox" name="catIDs" value="1" /> 
<input type="checkbox" name="catIDs" value="2" /> 
... 
<input type="checkbox" name="catIDs" value="100" /> 

मैं कैसे एक कार्रवाई में एक FormCollection से पूर्णांकों की एक सरणी पुनर्प्राप्त करते हैं:

public ActionResult Edit(FormCollection form) 
{ 
    int [] catIDs = (IEnumerable<int>)form["catIDs"]; // ??? 

    // alternatively: 
    foreach (int catID in form["catIDs"] as *SOME CAST*) 
    { 
     // ... 
    } 

    return View(); 
} 

नोट: मैंने संबंधित प्रश्न पढ़े और मैं अपने एक्शन पैरामीटर को बदलना नहीं चाहता, उदाहरण के लिए। Edit(int [] catIDs)

+0

आपको 'चेकबॉक्स' के 'name' मान को' catIds में बदलना चाहिए [] ' – Houssni

उत्तर

20

जब आपके पास एक ही नाम के साथ एकाधिक नियंत्रण होते हैं, तो वे अल्पविराम से अलग मूल्य होते हैं। दूसरे शब्दों में:

string [] AllStrings = form["catIDs"].Split(','); 
foreach(string item in AllStrings) 
{ 
    int value = int.Parse(item); 
    // handle value 
} 

या LINQ का उपयोग:

string catIDs = form["catIDs"]; 

catIDs "1,2,3, ..."

तो सभी मूल्यों आप इस करना होगा प्राप्त करने के लिए है:

var allvalues = form["catIDs"].Split(',').Select(x=>int.Parse(x)); 

फिर आप सभी मूल्यों के माध्यम से गणना कर सकते हैं।

+3

catIDs" 1, false, 3,4, false, 6, ... "हो सकता है। आपको अपनी सूची से उन झूठों को हटाना पड़ सकता है। –

17

सुरक्षित तरीका का उपयोग करना होगा: form.GetValues("CatIds") इससे आपको पोस्ट में सरणी मिल जाएगी। बस अगर आपके इनपुट में कॉमा था।

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