2011-12-16 34 views
16
@Html.CheckBox("orderNumbers", new { value = 1 }) 
@Html.CheckBox("orderNumbers", new { value = 2 }) 
@Html.CheckBox("orderNumbers", new { value = 3 }) 
@Html.CheckBox("orderNumbers", new { value = 4 }) 
@Html.CheckBox("orderNumbers", new { value = 5 }) 

[HttpPost] 
public ActionResult MarkAsCompleted(IEnumerable<int> orderNumbers) { } 

[HttpPost] 
public ActionResult MarkAsCompleted(IEnumerable<string> orderNumbers) { } 

Nếu tôi sử dụng chữ ký đầu tiên trong phương thức hành động của mình, tôi nhận được một số trống IEnumerable.Ràng buộc hộp kiểm vào int/enumerable trong MVC

Nếu tôi sử dụng chữ ký thứ hai, tôi nhận giá trị nhưng tôi cũng nhận được giá trị sai cho các giá trị không được chọn (vì mẫu MVCs che khuất tất cả hộp kiểm với trường ẩn).

ví dụ: Tôi sẽ nhận được một số thông tin như orderNumbers = { "1", "2", "false", "4", "false" }

Tại sao tôi không thể lấy danh sách các số?

Trả lời

8

Vì đó là cách trợ giúp CheckBoxFor được cung cấp đang hoạt động.

Bạn phải tự tạo html cho hộp kiểm. Sau đó, các đầu vào ẩn không được tạo ra và bạn sẽ chỉ nhận được các giá trị số nguyên đã chọn.

+0

Thật vậy, dĩ nhiên là tôi làm. Thật là một thằng ngốc! Tôi đã giả định sai rằng họ sẽ làm một cái gì đó thông minh trong bộ mô hình để bỏ qua các giá trị sai nếu chúng không thể bị ràng buộc với kiểu được yêu cầu. – fearofawhackplanet

23

Bạn có thể nhận tất cả các giá trị đã chọn theo cách sau.

đang điều khiển:

public ActionResult Index() 
    {    
     return View(); 
    } 

    [AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult Index(string[] orderNumbers) 
    { 
     return View(); 
    } 

Xem Code:

@using (Html.BeginForm()) 
{ 
    <input name="orderNumbers" type="checkbox" value="1" /> 
    <input name="orderNumbers" type="checkbox" value="2" /> 
    <input name="orderNumbers" type="checkbox" value="3" /> 
    <input name="orderNumbers" type="checkbox" value="4" /> 
    <input name="orderNumbers" type="checkbox" value="5" /> 

    <input type="submit" name="temp" value="hi" /> 
} 

Hãy giữ một điều trong tâm trí của tôi rằng, bạn cần phải cung cấp cho cùng một tên cho tất cả các hộp kiểm. Trong mảng, bạn sẽ nhận được các giá trị cho tất cả các hộp kiểm đã chọn.

5

Ngoài câu trả lời tuyệt vời của alok_dida. Vì tất cả các giá trị là số nguyên, bạn có thể có mã điều khiển của mình lấy một mảng các số nguyên và tránh thực hiện chuyển đổi.

này hoạt động trong MVC4 +:

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Index(int[] orderNumbers) 
{ 
    return View(); 
} 
Các vấn đề liên quan