У меня есть функциональность, где я добавляю выбранный HTML при нажатии кнопки с помощью jQuery. У меня уже есть выбор, который использует помощник тега asp-item, чтобы заполнить его моей соответствующей моделью. Я использую платформу asp-net core 2.2, и для своей страницы я использую бритву.
Мой вопрос: как мне отредактировать мой jQuery, чтобы при нажатии на кнопку asp-элемент уже загружался в select?
Вот мой код jQuery:
$("#AddButton").click(function () {
tc = tc + 1;
$("#totalContacts").val(tc)
$(".addselection").append('<div> <select class="form-control" name="[' + (tc) + '].DriverID" asp-for="TripDrivers.DriverID" asp-items="Model.DriverList" > <option value = ""> Select a driver </option></select></div>')
});
и это мой OnGet для загрузки предметов
public IActionResult OnGet()
{
DriverList = _context.Drivers.Select(a =>
new SelectListItem
{
Value = a.ID.ToString(),
Text = a.FullName
}).ToList();
}
Это мой первый вопрос, так что, пожалуйста, потерпите меня, если есть какие-либо грамматические ошибки или недостающая информация. Я добавлю их, если необходимо.
РЕДАКТИРОВАТЬ: Вот дизайн, который я пытаюсь сделать.
После нажатия кнопки плюса. В него должен быть добавлен ряд выпадающего списка, в котором каждый параметр загружается из списка метода OnGet.
ДРУГОЕ РЕДАКТИРОВАНИЕ: в соответствии с инструкциями пользователя @itminus я создал одну страницу примера и частичное представление дляпримените приведенный ниже код.
Вот как выглядит мой FirstPage.cshtml
@page
@model MasigasigTrackingSystem.Pages.TestingPages.FirstPageModel
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>FirstPage</title>
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"></script>
<script>
$("#AddButton").click(function () {
tc = tc + 1;
$("#totalContacts").val(tc)
$.ajax('?handler=DropdownList', {
method: "GET",
data: { tc: tc },
success: function (d) { $(".addselection").append(d); }
});
});
</script>
</head>
<body>
<button id="AddButton" class="btn" type="button">+</button>
@*<select asp-for="Mode" asp-items="Model.DropdownListViewModel.Drivers" class="form-control">
<option value="">Select a driver</option>
</select>*@
<div class="addselection">
<partial name="_SecondPage.cshtml" />
</div>
</body>
</html>
My FirstPageModel
namespace MasigasigTrackingSystem.Pages.TestingPages
{
public class FirstPageModel : PageModel
{
private readonly MasigasigTrackingSystem.Data.ApplicationDBContext _context;
public FirstPageModel(MasigasigTrackingSystem.Data.ApplicationDBContext context)
{
_context = context;
}
[BindProperty]
public Drivers Drivers { get; set; }
public List<SelectListItem> DriverList { get; set; }
[BindProperty]
public DropdownListViewModel DropdownListViewModel { get; set; }
public void OnGet()
{
DriverList = _context.Drivers.Select(a =>
new SelectListItem
{
Value = a.ID.ToString(),
Text = a.FullName
}).ToList();
DropdownListViewModel = new DropdownListViewModel();
DropdownListViewModel.Drivers = DriverList;
}
public IActionResult OnGetDropdownListAsync(int tc)
{
var list = _context.Drivers.Select(a => new SelectListItem
{
Value = a.ID.ToString(),
Text = a.FullName,
}).ToList(); // or filter by Where( ... tc...).ToList()
return Partial("/Pages/TestingPages/_SecondPage.cshtml", new DropdownListViewModel
{
Drivers = list,
ID = tc,
});
}
}
}
Мой частичный _SecondPage
@using MasigasigTrackingSystem.Models
@model DropdownListViewModel
<div>
<select class="form-control dropdown" name="[@Model.ID].DriverID" asp-items="@Model.Drivers">
<option> Select a driver </option>
</select>
</div>
Мой DropdownlistViewModel
namespace MasigasigTrackingSystem.Models
{
public class DropdownListViewModel
{
public int ID { get; set; }
public IList<SelectListItem> Drivers { get; set; }
}
}