Привязать значение к сложному типу - PullRequest
5 голосов
/ 03 апреля 2012

У меня есть модель, подобная следующей:

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

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

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

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

1 Ответ

3 голосов
/ 03 апреля 2012

я добавил в вашу модель 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...