Как использовать флажки для пакетной работы? - PullRequest
0 голосов
/ 13 сентября 2018

Скажи, что у меня есть такой вид:

<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#assign">
    Assign
</button>
<table class="table table-hover table-bordered table-sm">
    <thead class="thead-light">
        <tr>
            <th></th>
            <th>Name</th>
        </tr>
    </thead>
    @foreach (var employee in ViewBag.employees)
    {
        <tr>
            <td><input type="checkbox" name="@employee.Id" /></td>
            <td>@employee.Name</td>
        </tr>
    }
</table>
<!-- Modal -->
<div class="modal fade" id="assign" tabindex="-1" role="dialog">
    <div class="modal-dialog modal-dialog-centered" role="document">
        <div class="modal-content">
            <div class="modal-header">
                <h5 class="modal-title" id="modalTitle">Assign employee to group</h5>
                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                    <span aria-hidden="true">&times;</span>
                </button>
            </div>
            <div class="modal-body">
                <!-- a dropdown of groups -->
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-secondary" data-dismiss="modal">Cancel</button>
                <button type="button" class="btn btn-primary">Assign</button>
            </div>
        </div>
    </div>
</div>

И у меня есть контроллер для вызова:

public ActionResult Assign(List<int> employeeIds, int groupId)

Как я могу получить список Id, которые проверены, и groupId из выпадающего списка в модале, чтобы я мог вызвать контроллер?

Например, если данные выглядят так

0. Alice
1. Bob
2. Charlie
3. Dan

И я проверил Боба и Чарли и хочу назначить их группе 1, поэтому employeeId s будет 1 и 2, а groupId будет 1.

1 Ответ

0 голосов
/ 13 сентября 2018

Вам нужно использовать цикл for вместо foreach.Кроме того, я предлагаю использовать ViewModel вместо ViewBag.

@using (Html.BeginForm("Index", "Home", FormMethod.Post, null))
{
    for (int i = 0; i < Model.Employees.Count; i++)
    {
        <tr>
            <td>@Html.CheckBoxFor(x => Model.Employees[i].Checked)</td>
            <td>@Model.Employees[i].Name</td>
        </tr>
    }
    <input type="submit" value="Submit" />
}

Модель

Вы хотите переименовать ViewModel что-то значимое.

public class ViewModel
{
    public List<Employee> Employees { get; set; }
    public int GroupId { get; set; }
}

public class Employee
{
    public int Id { get; set; }
    public string Name { get; set; }
    public bool Checked { get; set; }
}

Контроллер

public class HomeController : Controller
{
    public ActionResult Index()
    {
        ViewModel vm = new ViewModel
        {
            Employees = new List<Employee>
            {
                new Employee {Id=1, Name = "John", Checked = true},
                new Employee {Id=2, Name = "Eric", Checked = false}
            }
        };
        return View(vm);
    }

    [HttpPost]
    public ActionResult Index(ViewModel vm)
    {
        return View(vm);
    }
}

enter image description here

enter image description here

Здесь - это другой способ.

...