2012-04-03 2 views
5

У меня есть модель, как следующий:Bind значения сложного типа

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

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

Как бы я должен сделать соответствующую форму просмотра, чтобы получить модель правильно переплетен после запроса поста? Пользователь должен иметь возможность выбирать различные поля с помощью флажков, а модель должна содержать выбранные. В приведенном ниже методе действия члены модели имеют значение NULL.

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

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"/> 
} 

Редактор шаблона[/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) 
Смежные вопросы