我有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鲨鱼知道如何进行?
先谢谢你们了 :-)