如何从Ajax跨多个形式设置相同的下拉列表
我在不同的手风琴元素中有多个相同形式的实例。每种形式代表一个不同的项目。我试图通过动态存储的管理人员列表在表单上填充下拉菜单。我只能获取第一个下拉实例,而不是其余的。如何获得经理下拉列表的所有实例?
html
@foreach (Project project in Model.Projects)
{
<div class="accordion-item">
<h2 class="accordion-header" id="@("heading"+project.Key)">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" aria-expanded="false">
<b> @project.Number- </b>: @project.Name
</button>
</h2>
<div class="accordion-body">
<form>
<div class="mb-3 row">
<label for="manager" class="col-sm-1 col-form-label">Manager</label>
<div class="col-sm-3">
<select class="form-control capManager" asp-for="@project.Manager"></select>
</div>
<label for="budgetYear" class="col-sm-2 col-form-label" style="text-align: right">Budget Year</label>
<div class="col-sm-1">
<input type="text" class="form-control" asp-for="@project.BudgetYear">
</div>
<label for="budgetQuarter" class="col-sm-1 col-form-label">Quarter</label>
<div class="col-sm-1">
<input type="text" class="form-control" asp-for="@project.BudgetQuarter">
</div>
<div class="col-sm-3"></div>
</div>
</form>
</div>
</div>
}
javascript
function populateManagerOptions() {
//Populate Manager options
$.ajax({
url: '/Lookup/GetProjManagerData/',
type: 'GET',
data: {
'reason': 'dropdown'
},
dataType: 'json',
success: function (json) {
const collection = document.getElementsByClassName("capManager");
for (let i = 0; i < collection.length; i++) {
$.each(json, function (i, value) {
collection[i].append($('<option>').text(value.mgrname).attr('value', value.projmgr));
});
}
}
});
}
控制器
[HttpGet]
public IActionResult GetProjManagerData(string reason)
{
try
{
IEnumerable<TblProjmgr> codes = _context.TblProjmgr.AsEnumerable();
if (reason == "dropdown")
return Json(codes);
else
return Json(new { data = codes });
}
catch (Exception ex)
{
_logger.LogError(ex, DateTime.Now + "- Error occured during GetCauseData()");
return Json(new { error = ex.Message.ToString() });
}
}
如何正确填充每种形式的管理器选择?
I have multiple instances of the same form within different accordion elements. Each form represents a different project. I am trying to populate a dropdown on the form with a list of managers that is stored dynamically. I can only get the first dropdown instance to populate, and not the rest. How do I get all the instances of the manager dropdown to populate?
HTML
@foreach (Project project in Model.Projects)
{
<div class="accordion-item">
<h2 class="accordion-header" id="@("heading"+project.Key)">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" aria-expanded="false">
<b> @project.Number- </b>: @project.Name
</button>
</h2>
<div class="accordion-body">
<form>
<div class="mb-3 row">
<label for="manager" class="col-sm-1 col-form-label">Manager</label>
<div class="col-sm-3">
<select class="form-control capManager" asp-for="@project.Manager"></select>
</div>
<label for="budgetYear" class="col-sm-2 col-form-label" style="text-align: right">Budget Year</label>
<div class="col-sm-1">
<input type="text" class="form-control" asp-for="@project.BudgetYear">
</div>
<label for="budgetQuarter" class="col-sm-1 col-form-label">Quarter</label>
<div class="col-sm-1">
<input type="text" class="form-control" asp-for="@project.BudgetQuarter">
</div>
<div class="col-sm-3"></div>
</div>
</form>
</div>
</div>
}
Javascript
function populateManagerOptions() {
//Populate Manager options
$.ajax({
url: '/Lookup/GetProjManagerData/',
type: 'GET',
data: {
'reason': 'dropdown'
},
dataType: 'json',
success: function (json) {
const collection = document.getElementsByClassName("capManager");
for (let i = 0; i < collection.length; i++) {
$.each(json, function (i, value) {
collection[i].append($('<option>').text(value.mgrname).attr('value', value.projmgr));
});
}
}
});
}
Controller
[HttpGet]
public IActionResult GetProjManagerData(string reason)
{
try
{
IEnumerable<TblProjmgr> codes = _context.TblProjmgr.AsEnumerable();
if (reason == "dropdown")
return Json(codes);
else
return Json(new { data = codes });
}
catch (Exception ex)
{
_logger.LogError(ex, DateTime.Now + "- Error occured during GetCauseData()");
return Json(new { error = ex.Message.ToString() });
}
}
How do I properly populate the manager select for each form?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我发现答案是我需要在创建模型数据时创建下拉菜单的实例。因此,对于model.projects的每个实例;我将每个项目与所选值一起定义了完整的下拉列表。
然后,我使用剃须刀来定义下拉词:
I found out the answer to be that I need to create an instance of the dropdown when I create the model data. So for each instance of Model.Projects; each project I defined the full dropdown alongside the selected value.
I use Razor to then define the dropdown as such: