MVC3 Как привязать несколько флажков к 1 свойству в ViewModel - PullRequest
7 голосов
/ 03 ноября 2011

Мне нужно отобразить список флажков, которые можно установить более чем на один.

Когда пользователь нажимает "Отправить", значение этих флажков нужно указать в свойстве ViewModel ... это то, что я получил до сих пор ...

public class RegisterModel
{
    public List<string> Roles { get; set; }
    public List<RoleModel> SelectedRoles { get; set; }    
}
public class RoleModel
{
    public string RoleName { get; set; }
}

По-моему, я пытаюсь сделать это ...

@foreach (var role in Model.Roles)
{
    @Html.CheckBoxFor(m => m.SelectedRoles, role.RoleName)@role.RoleName
}

Я получаю следующую ошибку:

CS0029: Cannot implicitly convert type 'System.Collections.Generic.List<string>' to 'bool'

Может кто-нибудь сказать мне, что я делаю не так?

1 Ответ

18 голосов
/ 03 ноября 2011

Простой: адаптируйте ваши модели представлений в соответствии с требованиями ваших представлений (то есть, чтобы показать список флажков для некоторых ролей), используйте шаблоны редактора и избегайте циклических циклов в ваших представлениях.

Итак:

Просмотр модели:

public class RegisterModel
{
    public List<RoleModel> Roles { get; set; }
}

public class RoleModel
{
    public string RoleName { get; set; }
    public bool Selected { get; set; }
}

Контроллер:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        var model = new RegisterModel
        {
            Roles = new[]
            {
                new RoleModel { RoleName = "administrator" },
                new RoleModel { RoleName = "developer" },
                new RoleModel { RoleName = "janitor :-)" },
            }.ToList()
        };
        return View(model);
    }

    [HttpPost]
    public ActionResult Index(RegisterModel model)
    {
        // at this stage the model will contain all the 
        // information you need
        return View(model);
    }
}

Просмотр (~/Views/Home/Index.cshtml):

@model RegisterModel

@using (Html.BeginForm())
{
    @Html.EditorFor(x => x.Roles)
    <button type="submit">OK</button>
}

Шаблон редактора (~/Views/Home/EditorTemplates/RoleModel.cshtml):

@model RoleModel

<div>
    @Html.HiddenFor(x => x.RoleName)
    @Html.CheckBoxFor(x => x.Selected)
    @Html.LabelFor(x => x.Selected, Model.RoleName)
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...