2012-04-03 112 views
5

我有類似以下的模型:綁定值複雜類型

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

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

如何將不得不作出相應的視圖的形式,獲得那個職位請求後綁定正確的模型?用戶應該能夠選擇帶有複選框的各種字段,而模型應該包含選定的字段。 在下面的Action方法中,模型的成員爲空。

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

回答

3

我已經添加到您的模型Selected財產

我增加了一個EditorTemplate顯示單個Field

現在,當您提交會發生什麼,所有的項目將被髮送給您可然後過濾所有物品的屬性Selected=true

該型號

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; } 
} 

的控制器[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(); 
} 

[/Views/Test/Index.cshtml]

@model MvcApplication2.Models.TestModel 

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

的編輯模板[/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)