Вложенные элементы HtmlCollectionItems с использованием. NET Core View Components - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть особая форма, которая содержит вложенный набор Html.BeginCollectionItems. Учитывая следующий макет, у меня есть элементы коллекции для Addresses и для Files:

Basic Form Information
    Address #1
        File #1
        File #2
    Address #2
        File #1
        File #2

CollectionItem для Addresses работает, как ожидалось, однако Files внутри каждого Address не принимаются, когда я отправляю форму. После проверки я понимаю, почему файлы не добавляются к каждому адресу. Это потому, что случайный Id, назначенный HtmlCollectionItem для Address, не добавляется в качестве префикса к каждому File CollectionItem. Как мне справиться с этим?


Небольшая информация:

Пользователь нажимает «Добавить адрес», чтобы динамически создать Address, а затем в разделе формы «Адрес» пользователь может нажмите «Добавить файл», чтобы добавить файл к адресу. Я использую. NET Компоненты представления Core для визуализации на странице.

Учитывая следующие (урезанные) модели:

BasicForm.cs

class BasicForm {
    public int BasicFormId { get; set; }
    ...
    public ICollection<Address> Addresses { get; set; }
}

Address.cs

class Address {
    public int AddressId { get; set; }
    ...
    public ICollection<File> Files { get; set; }
}

File.cs

class File {
    public int FileId { get; set; }
    ...
}

Я создал HTML Просмотреть компоненты для Addresses и Files:

Представления / Общий / Адрес / По умолчанию. html

@using (Html.BeginCollectionItem("Addresses"))
{
    <div class="form-row">
        <input asp-for="AddressId" hidden />
    </div>
}

Вот файловый компонент, Я думаю, что мне нужно каким-то образом добавить HTML ID коллекции родительского адреса в CollectionItem здесь:

Views / Shared / File / Default. html

<!-- Can I Add something to this line below to reference the parent Address?? -->
@using (Html.BeginCollectionItem("Files"))
{
    <div class="form-row">
        <input asp-for="FileId" hidden />
    </div>
}

Я опускаю методы контроллера return ViewComponent("Address", addressModel) и return ViewComponent("File", fileModel), которые вызываются, когда пользователь щелкает, чтобы создать адрес / файл (в теле каждого метода нет ничего, кроме возврата модели в указанный ViewComponent). Я видел следующий ответ StackOverflow , но добавление HtmlFieldPrefix пусто в моем случае. В любом случае он использовал Partials.

Кто-нибудь знает правильный способ ссылки HtmlCollectionItems в родительском элементе коллекции? Спасибо!

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