Привязать динамические входы - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть форма с динамическими входами, поэтому я не знаю количества и имен входов, как вы можете видеть из приведенного ниже кода, они пришли из базы данных.

 <div class="panel-body">
    <form asp-action="BrandFilter" method="get">
        <div class="form-group">
            @foreach (var brand in Model)
            {
                <div class="checkbox">
                    <label>
                        <input asp-for="@brand" type="checkbox" />@brand (10)
                    </label>
                </div>
            }
        </div>
        <button class="btn btn-default btn-sm btn-primary"><i class="fa fa-pencil"></i> Apply</button>
    </form>
</div>

Вопрос в том, как связать все входные данные при отправке формы.

public async Task<IActionResult> BrandFilter( /* ??? /*)

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

Приведенный выше ответ действительно работает, но я нашел и другой подход.

В файле CSHTML:

<input name="@brand.Name" type="checkbox" value="true"/>@brand.Name (@brand.Count)

Подпись метода:

 public async Task<IActionResult> BrandFilter(Dictionary<string, bool> brands)

При таком подходе вы получаете только проверенные входные данные, что приводит к уменьшению объема данных, отправляемых на сервер.

Итак, вместо того, чтобы публиковать другой вопрос, прокомментируйте этот ответ и скажите, что вы думаете о обоих подходах, и какой из них лучше?

0 голосов
/ 12 ноября 2018

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

1.Brand.cs

public class Brand
{
    [Key]
    public int ID { get; set; }
    public string Name { get; set; }
    public bool Selected { get; set; }
}

2.View

@model List<Models.Brand>
<div class="col-md-4">
    <form asp-action="BrandFilter" method="post">
        <div class="form-group">

            @for (int i = 0; i < Model.Count(); i++)
            {
                <div class="checkbox">
                    @Html.HiddenFor(m => m[i].Name)
                    @Html.CheckBoxFor(m => m[i].Selected)
                    @Html.DisplayFor(m => m[i].Name)
                </div>
            }

        </div>

        <div class="form-group">
            <input type="submit" value="Submit" class="btn btn-default" />
        </div>
    </form>
</div>

3.controller

 public async Task<IActionResult> BrandFilter(List<Brand> brands)
...