You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET开发:如何在Index页面直接调用Controller方法填充下拉框

控制器Action直接填充下拉列表的实现方案

首先你原有代码中的getRooms是私有方法,无法被路由系统或外部请求访问,需要先在控制器中封装一个公开的Action接口供调用。

方案1:前端异步调用Action(无需ViewBag/ViewData)

该方式不需要修改Index页面对应的Action逻辑,页面加载完成后异步拉取选项填充,适合选项可能动态变化的场景。

控制器代码修改

// 新增公开Action,返回房间列表的JSON结果
public IActionResult GetRooms()
{
    // 此处替换为你实际获取DbSet<RmRoom>的逻辑,比如从注入的DbContext中取
    var rooms = getRooms(_context.RmRooms);
    return Json(rooms);
}

// 原有私有方法保留
private SortedSet<string> getRooms(DbSet<RmRoom> rmRooms)
{
    var roomNameSet = new SortedSet<string>();
    foreach (var item in rmRooms)
    {
        roomNameSet.Add(item.Name);
    }
    return roomNameSet;
}

页面代码修改

<select id="dropdownRoom">
    <option value="0">Select Room</option>
</select>

<script>
window.onload = function() {
    // 路径中的[YourControllerName]替换为你实际的控制器名称,比如HomeController就写/Home/GetRooms
    fetch('/[YourControllerName]/GetRooms')
        .then(res => res.json())
        .then(rooms => {
            const dropdown = document.getElementById('dropdownRoom');
            rooms.forEach(roomName => {
                const option = document.createElement('option');
                option.value = roomName;
                option.innerText = roomName;
                dropdown.appendChild(option);
            });
        })
}
</script>

方案2:服务端渲染调用Action

该方式在页面渲染时就直接生成下拉选项,没有加载延迟,适合选项固定的场景。

控制器新增分部视图Action

public IActionResult RoomDropdownPartial()
{
    var rooms = getRooms(_context.RmRooms);
    return PartialView(rooms);
}

新增分部视图RoomDropdownPartial.cshtml

@model SortedSet<string>

<select id="dropdownRoom">
    <option value="0">Select Room</option>
    @foreach (var room in Model)
    {
        <option value="@room">@room</option>
    }
</select>

Index页面直接调用渲染

<!-- 替换[YourControllerName]为实际控制器名 -->
@await Html.ActionAsync("RoomDropdownPartial", "[YourControllerName]")

内容的提问来源于stack exchange,提问作者user4912134

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 22:36:03