如何从Ajax跨多个形式设置相同的下拉列表

发布于 2025-02-13 09:30:40 字数 2970 浏览 0 评论 0原文

我在不同的手风琴元素中有多个相同形式的实例。每种形式代表一个不同的项目。我试图通过动态存储的管理人员列表在表单上填充下拉菜单。我只能获取第一个下拉实例,而不是其余的。如何获得经理下拉列表的所有实例?

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

嘦怹 2025-02-20 09:30:41

我发现答案是我需要在创建模型数据时创建下拉菜单的实例。因此,对于model.projects的每个实例;我将每个项目与所选值一起定义了完整的下拉列表。

然后,我使用剃须刀来定义下拉词:

<select class="form-select" asp-for="@project.Manager" asp-items="@project.ManagerList"></select>

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:

<select class="form-select" asp-for="@project.Manager" asp-items="@project.ManagerList"></select>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文