Как установить значение нескольких флажков, которые связаны со связанной таблицей из-за отношения «многие ко многим» MVC - PullRequest
0 голосов
/ 29 января 2019

У меня есть флажок, где пользователь может выбрать ряд услуг, которые могут быть предоставлены компании.Я могу сохранить услуги, и все работает нормально.Службы связаны с компанией через таблицу CompanyService, которая в качестве companyId и serviceId.

Если пользователь нажимает кнопку редактирования, я не уверен, как установить флажки при загрузке.Я рассмотрел другие варианты, используя IsChecked, но я не могу добавить свойство к своей модели услуг, так как она обслуживает несколько компаний.Как мне это сделать?

Моя сервисная модель

    public int Id { get; set; }
    [Required]
    public string Name { get; set; }

    public virtual ICollection<CompanyService> CompanyServices { get; set; }
    public virtual ICollection<TrustService> TrustServices { get; set; }

Моя модель CompanyService

    [Key]
    [Column(Order =1)]
    public int CompanyId { get; set; }
    [Key]
    [Column(Order =2)]
    public int ServiceId { get; set; }

    public virtual Company Company { get; set; }
    public virtual Service Service { get; set; }

И, наконец, код Razor

<div class="col-lg-5">
                <div class="col-12">
                    <ul class="list-group" id="serviceList">
                        <li class="list-group-item service-heading">Services</li>
                        @foreach (var service in Model.Services)
                        {
                            <li class="list-group-item">
                                <input type="checkbox" name="services" value="@service.Id" id="check_@service.Id" />
                                <label for="check_@service.Id">@service.Name</label>
                            </li>
                        }
                    </ul>
                </div>
            </div>

Нужно ли создавать IsChecked на моей таблице CompanyServices и пытаться присвоить проверенное значение оттуда?Если так, то как бы я это сделал?

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Нужно ли создавать IsChecked на моей таблице CompanyServices и пытаться присвоить проверенное значение оттуда?Если да, то как мне это сделать?

Да, вам нужно создать свойство типа boolean внутри вашей модели, чтобы вы могли использовать строго типизированный HTML-помощник Razor для Checkbox.

Обновленный код ниже.

<div class="col-lg-5">
                <div class="col-12">
                    <ul class="list-group" id="serviceList">
                        <li class="list-group-item service-heading">Services</li>
                        @for (int i = 0; i < Model.Services.Count; i++)
                        {
                            <li class="list-group-item">
                             @Html.HiddenFor(model=>model.Services[i].Id)
                             @Html.CheckBoxFor(model=>model.Services[i].IsChecked)
                          
                                <label for="@Html.IdFor(model=>model.Services[i].IsChecked)">@Model.Services[i].Name</label>
                            </li>
                        }
                    </ul>
                </div>
            </div>

PS: Обратите внимание на помощника HiddenFor для Id.который будет поддерживать связь между Id и значением его флажка (проверено / не отмечено) на стороне сервера для привязки модели.

0 голосов
/ 29 января 2019

Для начала не используйте foreach.Это не создаст правильные привязки для модели, привязывающей значения обратно к вашей модели.Используйте for, как в for (int i = 0; i < Model.Services.Count; i++)

Во-вторых, вам нужно использовать индексатор в ваших флажках.

Наконец, используйте CheckboxBox как в @Html.CheckboxFor(x => x.Services[i].Id),

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