Как проверить, какой чекбокс проверен в представлении в MVC3? - PullRequest
0 голосов
/ 13 марта 2012

Модель:

public IEnumerable<Role> Roles { get; set; }

Индекс:

Roles = securityServiceClient.GetAllRoles()

Просмотр:

@foreach (var role in Model.Roles)
            {
                <tr>
                    @if (role.Name == "User")
                    {
                        <td><input type="checkbox" checked="checked"/></td>
                    }
                    else
                    {
                        <td><input type="checkbox"/></td>
                    }
                    <td>@Html.Label(role.Name)</td>
                </tr>
            }

 [HttpPost]
CreateSomething :

Как получить выбранные флажки из вида?

1 Ответ

2 голосов
/ 13 марта 2012

Вы должны дать своим флажкам имена:

@if (role.Name == "User")
{
    <td><input type="checkbox" checked="checked" name="roles"/></td>
}
else
{
    <td><input type="checkbox" name="roles"/></td>
}

и затем:

[HttpPost]
public ActionResult Index(IEnumerable<string> roles)
{
    ...    
}

Кроме того, вы должны использовать модели представлений, строго типизированные представления и помощники, а не чекбоксы с жестким кодом, как вы делали в своих обзорах.

Вот что я имею в виду:

Модель:

public class MyViewModel
{
    public RoleViewModel[] Roles { get; set; }
}

public class RoleViewModel
{
    public string RoleName { get; set; }
    public bool IsSelected { get; set; }
}

, а затем:

public class HomeController: Controller
{
    public ActionResult Index()
    { 
        var roles = securityServiceClient.GetAllRoles().Select(r => new RoleViewModel
        {
            RoleName = r.Name
        });

        var model = new MyViewModel
        {
            Roles = roles
        };
        return View(model);
    }

    [HttpPost]
    public ActionResult Index(IEnumerable<RolesViewModel> roles)
    {
        ...
    }
}

и в представлении:

@model MyViewModel
@using (Html.BeginForm())
{
    <table>
        <thead>
            <tr>
                <th>role</th>
            </tr>
        </thead>
        <tbody>
            @for (var i = 0; i < Model.Roles.Length; i++)
            {
                <tr>
                    <td>
                        @Html.CheckBoxFor(x => x.Roles[i].IsSelected)
                        @Html.LabelFor(x => x.Roles[i].IsSelected, Model.Roles[i].RoleName)
                        @Html.HiddenFor(x => x.Roles[i].RoleName)
                    </td>
                </tr>
            }
        </tbody>
    </table>
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...