У меня есть 2 поля выбора.
Одно показывает список элементов:
<select id="itemlist" asp-for="WorkTask.ItemId" asp-items="@Model.itemList.ToSelectListItem(Model.WorkTask.ItemId)"></select>
Одно показывает список клиентов:
<select id="customerlist" asp-for="WorkTask.CustId" asp-items="@Model.customerList.ToSelectListItem(Model.WorkTask.CustId)"></select>
Я с помощью метода расширения для заполнения полей выбора, которые выглядят следующим образом:
public static IEnumerable<SelectListItem> ToSelectListItem<T>(this IEnumerable<T> items, int selectedValue)
{
return from item in items
select new SelectListItem
{
Text = item.GetPropertyValue("Name"),
Value = item.GetPropertyValue("Id"),
Selected = item.GetPropertyValue("Id").Equals(selectedValue.ToString())
};
}
Когда я выбираю элемент в первом поле выбора, мне нужно просмотреть список клиентов (в основном это только один) выбранный элемент принадлежит и показывает это в последнем поле выбора.
В нижней части окна MVC у меня есть следующий код:
<script>
function updateCustomerList() {
var itemSelected = document.getElementById("itemlist").value;
$list = $('#customerlist');
$.ajax({
url: '/Admin/WorkTask/GetCustomer/' + itemselected,
type: 'GET',
dataType: 'text',
success: function (data) {
results = JSON.parse(data);
$list.html('');
for (i in results) {
$list.append('<option value="' + i + '">' + results[i].text + '</option>');
}
}
});
}
$(document).ready(function () {
updateCustomerList();
});
$('#itemlist').on("change", function () {
updateCustomerList();
});
</script>
В контроллере (WorkTask ) У меня есть следующее действие:
[ActionName("GetCustomer")]
public async Task<IActionResult> GetCustomer(int id)
{
List<Customer> customers = new List<Customer>();
var item = await _db.Item.FindAsync(id);
var customer = await _db.Customer.Where(q => q.NavNumber == item.NavNumber).FirstOrDefaultAsync();
if (customer == null)
{
customers = await (from Customer in _db.Customer
select Customer).ToListAsync();
}
else
{
customers = await (from Customer in _db.Customer
where Customer.Id == Customer.Id
select Customer).ToListAsync();
}
return Json(new SelectList(customers, "Id", "Name"));
}
Когда я запускаю проект и выбираю вариант в списке элементов, ничего не происходит. Я не получаю ошибок и не знаю, что делать дальше. Я попытался распечатать значения с предупреждением, но не могу получить значения из вызова Ajax.
Оба поля выбора просто заполнены элементами и клиентами, так что это работает. Это просто зависимость, которая не работает.
Когда это сработает, я попытаюсь заставить работать и наоборот - когда я выбираю клиента в последнем поле выбора, он должен показывать мне только предметы, принадлежащие выбранному клиенту.
Я новичок в коде Ajax, так что, может быть, один из вас Ajax -харк знает, как действовать?
Заранее спасибо: - )