2010-04-11 5 views
15

Với nhiều HTML hộp kiểm sau:Bắt nhiều hộp kiểm từ yếu tố FormCollection

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

Làm thế nào để truy xuất một mảng các số nguyên từ một FormCollection trong một hành động:

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

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

    return View(); 
} 

Lưu ý: Tôi đọc các câu hỏi liên quan và tôi không muốn thay đổi các thông số hành động của mình, ví dụ: Edit(int [] catIDs).

+0

Bạn nên thay đổi giá trị 'tên' của' hộp kiểm 'thành' catIds [] ' – Houssni

Trả lời

20

Khi bạn có nhiều điều khiển có cùng tên, chúng là các giá trị được phân cách bằng dấu phẩy. Nói cách khác:

string catIDs = form["catIDs"]; 

catIDs là "1,2,3 ..."

Vì vậy, để có được tất cả các giá trị bạn sẽ làm điều này:

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

Hoặc sử dụng LINQ:

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

Sau đó, bạn có thể liệt kê tất cả các giá trị.

+3

catID có thể là" 1, false, 3,4, false, 6, ... ". bạn có thể phải loại bỏ những falses đó khỏi danh sách của bạn. –

17

Cách an toàn hơn sẽ là sử dụng: form.GetValues("CatIds") điều này sẽ giúp bạn nhận được mảng được chuyển trong bài đăng. Chỉ trong trường hợp bạn có dấu phẩy trong đầu vào của bạn.