Как я могу динамически добавлять входы в форму из модального ( - PullRequest
0 голосов
/ 21 марта 2020

У меня есть форма внутри моего приложения. NET Core 2.2 MVC для создания проектов, оно используется для заполнения следующей модели представления:

ProjectCreateViewModel:

public class ProjectCreateViewModel    
{
        public int ProjectId { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
        public ICollection<ProjectRequirement> ProjectRequirements { get; set; }
        public ICollection<ProjectTask> Tasks { get; set; }
        public Priority Priority { get; set; }
        public Status Status { get; set; }
        public bool AwardEligibility { get; set; }
        public decimal Progress { get; set; }
        public List<ProjectUsersViewModel> Users { get; set; }
        public DateTime StartDate { get; set; }
        public DateTime Deadline { get; set; }
        public DateTime EstimatedCompletionDate { get; set; }
        public List<ProjectUsersViewModel> AllUsers { get; set; }
    }
}

Форма состоит из 3 вкладок, одна из которых - «Требования». На этой вкладке я создал кнопку «Новое требование», которая открывает модальное окно с формой внутри, чтобы добавить новое требование в форму (сопоставленное со списком ProjectRequirements). Я хочу, чтобы пользователь мог добавлять столько требований, сколько ему нужно, в идеале без обновления страницы.

Вкладка формы требований, и это "Добавить новый" Модальный:

Снимок экрана с внешнего интерфейса веб-сайта

Модал «Новые требования», содержащийся в форме:

<form asp-action="Create">
        <ul class="nav nav-tabs nav-fill" role="tablist">
            <li class="nav-item">
                <a class="nav-link active" id="project-add-details-tab" data-toggle="tab" href="#project-add-details" role="tab" aria-controls="project-add-details" aria-selected="true">Details</a>
            </li>
            <li class="nav-item">
                <a class="nav-link" id="project-add-requirements-tab" data-toggle="tab" href="#project-add-requirements" role="tab" aria-controls="project-add-requirements" aria-selected="false">Requirements</a>
            </li>
            <li class="nav-item">
                <a class="nav-link" id="project-add-members-tab" data-toggle="tab" href="#project-add-members" role="tab" aria-controls="project-add-members" aria-selected="false">Members</a>
            </li>
        </ul>

        <div class="text-center">
            <hello-world></hello-world>
        </div>

        <div class="modal-body">
            <div class="tab-content">
                <div class="tab-pane fade show active" id="project-add-details" role="tabpanel">
                    <h6>General Details</h6>
                    <div class="form-group row align-items-center">
                        <label asp-for="Name" class="col-1"></label>
                        <input asp-for="Name" class="form-control col-4" placeholder="Project name" />
                        <span asp-validation-for="Name" class="text-danger form-validation"> </span>
                    </div>
                    <div class="form-group row align-items-center">
                        <label asp-for="Description" class="col-1">Description</label>
                        <textarea asp-for="Description" class="form-control col-4" rows="3" placeholder="Project description"></textarea>
                        <span asp-validation-for="Description" class="text-danger form-validation"></span>
                    </div>
                    <hr>
                    <h6>Timeline</h6>
                    <div class="form-group row align-items-center">
                        <label asp-for="StartDate" class="col-1">Start Date</label>
                        <input asp-for="StartDate" class="form-control col-2" placeholder="Select a date" data-flatpickr data-default-date="2021-04-21" data-alt-input="true" />
                        <span asp-validation-for="StartDate" class="text-dange form-validationr"></span>
                    </div>
                    <div class="form-group row align-items-center">
                        <label asp-for="Deadline" class="col-1">Due Date</label>
                        <input asp-for="Deadline" class="form-control col-2" placeholder="Select a date" data-flatpickr data-default-date="2021-09-15" data-alt-input="true" />
                        <span asp-validation-for="Deadline" class="text-danger form-validation"></span>
                    </div>
                    <hr>
                    <h6>Project Priority</h6>
                    <div class="form-group row align-items-center">
                        <label asp-for="Priority" class="col-1"></label>
                        <select asp-for="Priority" asp-items="Html.GetEnumSelectList<Priority>()" class="form-control col-1">
                            <option value=""></option>
                        </select>
                        <span asp-validation-for="Priority" class="text-danger form-validation"></span>
                    </div>
                </div>
                <div class="tab-pane fade" id="project-add-members" role="tabpanel">
                    <div class="users-manage" data-filter-list="form-group-users">
                        <div class="input-group input-group-round">
                            <div class="input-group-prepend">
                                <span class="input-group-text">
                                    <i class="material-icons">filter_list</i>
                                </span>
                            </div>
                            <input type="search" class="form-control filter-list-input" placeholder="Filter members" aria-label="Filter Members">
                        </div>
                        <div class="form-group-users">

                            @for (int i = 0; i < Model.AllUsers.Count; i++)
                            {
                                <div class="custom-control custom-checkbox">
                                    <input asp-for="@Model.AllUsers[i].IsSelected" type="checkbox" class="custom-control-input" />
                                    <label asp-for="@Model.AllUsers[i].IsSelected" class="custom-control-label">
                                        <span class="d-flex align-items-center">
                                            <img alt="Kenny Tran" src="~/assets/img/avatar-male-6.jpg" class="avatar mr-2" />
                                            <span class="h6 mb-0" data-filter-by="text">@Model.AllUsers[i].Username</span>
                                        </span>
                                    </label>
                                    <input asp-for="@Model.AllUsers[i].UserId" type="hidden" />
                                </div>
                            }
                        </div>
                    </div>
                </div>
                <div class="tab-pane fade" id="project-add-requirements" role="tabpanel">
                    <h6>Requirements</h6>

                    <div class="modal fade" id="new-requirement-modal" tabindex="-1" aria-hidden="true">
                        <div class="modal-dialog" role="document">
                            <div class="modal-content">
                                <div class="modal-header">
                                    <h5 class="modal-title">Add a New Requirement</h5>
                                    <button type="button" class="close btn btn-round" data-dismiss="modal" aria-label="Close">
                                        <i class="material-icons">close</i>
                                    </button>
                                </div>
                                <!--end of modal head-->
                                <div class="modal-body">
                                    <div>
                                        <div class="tab-content">
                                            <h6>Requirement Details</h6>
                                            <div class="form-group row">
                                                <label class="col-3">Title</label>
                                                <input class="form-control col" placeholder="Requirement title" />
                                            </div>
                                            <div class="form-group row align-items-center">
                                                <label class="col-3">Description</label>
                                                <textarea class="form-control col" rows="3" placeholder="Requirement description"></textarea>
                                            </div>
                                            <div class="form-group row align-items-center">
                                                <label class="col-3">Priority</label>
                                                <select asp-items="Html.GetEnumSelectList<Priority>()" class="form-control col-3">
                                                    <option value=""></option>
                                                </select>
                                            </div>
                                        </div>
                                    </div>
                                </div>
                                <!--end of modal body-->
                                <div class="modal-footer">
                                    <button role="button" class="btn btn-primary" type="submit">
                                        Add requirement
                                    </button>
                                </div>
                            </div>
                        </div>
                    </div>
                    <br />
                    <button role="button" type="button" class="btn btn-outline-primary" data-toggle="modal" data-target="#new-requirement-modal">
                        New Requirement
                    </button>
                </div>
            </div>
        </div>

        <!--end of modal body-->
        <div class="modal-footer">
            <button role="button" class="btn btn-primary" type="submit">
                Create Project
            </button>
        </div>
    </form>

Модель ProjectRequirement:

public class ProjectRequirement
{
        public int ProjectRequirementId { get; set; }
        public Project Project { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
        public Priority Priority { get; set; }
        public RequirementCategory Category { get; set; }
}

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

Заранее спасибо.

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