2012-04-03 38 views
5

Tôi có một mô hình như dưới đây:giá trị Bind đến phức tạp Loại

public class TestModel{ 
    public IList<Field> Fields {get; set;} 
} 

public class Field{ 
    public String Key {get; set;} 
    public String Value {get; set;} 
} 

Làm thế nào tôi sẽ phải thực hiện các hình thức xem tương ứng, để có được những mẫu binded một cách chính xác sau khi bài yêu cầu? Người dùng sẽ có thể chọn các trường khác nhau có hộp kiểm và Mô hình phải chứa các trường được chọn. Trong phương thức Action bên dưới, các thành viên của Model là null.

public ActionResult XY(TestModel model){[...]} 

Trả lời

3

tôi đã thêm vào mô hình của bạn một tài sản Selected

tôi đã thêm một EditorTemplate để hiển thị một đơn Field

gì sẽ xảy ra bây giờ khi bạn gửi, tất cả các mục sẽ được gửi cho bạn có thể sau đó lọc tất cả các mục mà có một tài sản của Selected=true

Model

012.
public class TestModel 
{ 
    public IList<Field> Fields { get; set; } 
} 

public class Field 
{ 
    public String Key { get; set; } 
    public String Value { get; set; } 
    public bool Selected { get; set; } 
} 

Controller[TestController.cs]

public ActionResult Index() 
{ 
    var testModel = new TestModel(); 
    testModel.Fields = new List<Field> 
          { 
           new Field { Key = "Choice 1" , Selected = true , Value = "1"}, 
           new Field { Key = "Choice 2" , Selected = false , Value = "2"}, 
           new Field { Key = "Choice 3" , Selected = false , Value = "3"} 
          }; 
    return View(testModel); 
} 

[HttpPost] 
public ActionResult XY(TestModel model) 
{ 
    var selectedFields = model.Fields.Where(f => f.Selected); 

    /** Do some logic **/ 

    return View(); 
} 

The View[/Views/Test/Index.cshtml]

@model MvcApplication2.Models.TestModel 

@using(@Html.BeginForm("XY","Test")) 
{ 
    @Html.EditorFor(m => m.Fields) 
    <input type="submit" value="submit"/> 
} 

Các biên tập viên Template[/Views/Test/EditorTemplates/Field.cshtml]

@model MvcApplication2.Models.Field 
<label> 
    @Html.CheckBoxFor(m =>m.Selected) 
    @Model.Key 
</label> 
@Html.HiddenFor(m =>m.Value) 
@Html.HiddenFor(m =>m.Key) 
Các vấn đề liên quan