【问题标题】:Passing selected item data to controller from Multilevel dropdown从多级下拉菜单将选定项目数据传递给控制器
【发布时间】:2021-10-08 07:16:07
【问题描述】:

我创建了一个动态的多级下拉菜单。 当我点击第三级项目(新的、正在进行的、已解决的来自数据库的项目)时,它应该被选中,并且只有当我点击创建按钮时,才应该将所选项目数据传递给控制器​​.

多级下拉代码

 <div class="dropdown drop">
            <button class="btn  dropdown-toggle"
                    type="button"
                    id="dropdownMenuButton"
                    data-mdb-toggle="dropdown"
                    aria-expanded="false">
                STATUS
            </button>
            <ul class="dropdown-menu" aria-labelledby="dropdownMenuButton">

                <li>
                    <a class="dropdown-item" href="#">
                        ProjectStatus &raquo;
                    </a>
                    <ul class="dropdown-menu dropdown-submenu">
                        @foreach (var i in ViewBag.ProjectStatus)
                        {
                        <li>
                            @*<a id="ProjectStatus" class="dropdown-item" href="#">@i.Text</a>*@
                            <select asp-for="ProjectStatus" class="form-control" value="@i.Text">@i.Text</select>
                        </li>
                        }
                    </ul>
                </li>
                <li>
                    <a class="dropdown-item" href="#">
                        DevelopmentStatus &raquo;
                    </a>
                    <ul class="dropdown-menu dropdown-submenu">
                        @foreach (var i in ViewBag.DevelopmentStatus)
                        {
                        <li>
                            <a class="dropdown-item" href="#">@i.Text</a>
                        </li>
                        }
                    </ul>
                </li>
            </ul>
        </div>

HttpGet 创建方法

public IActionResult Create()
{
    ViewBag.ProjectStatus = new SelectList(_context.ProjectStatus, "ProjectStatusID", "Status");
    ViewBag.DevelopmentStatus = new SelectList(_context.DevelopmentStatus, "DevelopmentStatusID", "Status");
    return View();
}

需要将选中的列表项数据获取到post方法

[HttpPost]
public async Task<IActionResult> Create(Projects ec) {}

【问题讨论】:

    标签: c# html asp.net-core .net-core model-view-controller


    【解决方案1】:

    你可以尝试把选中的item值放到一个隐藏输入,然后改变&lt;li&gt;&lt;/li&gt;的背景。这里有一个demo:

        <div class="dropdown drop">
            <button class="btn  dropdown-toggle"
                    type="button"
                    id="dropdownMenuButton"
                    data-mdb-toggle="dropdown"
                    aria-expanded="false">
                STATUS
            </button>
            <ul class="dropdown-menu" aria-labelledby="dropdownMenuButton">
        
                <li>
                    <a class="dropdown-item" href="#">
                        ProjectStatus &raquo;
                    </a>
                    <ul class="dropdown-menu dropdown-submenu">
                        @foreach (var i in ViewBag.ProjectStatus)
                        {
                            <li>
                                <a class="dropdown-item" href='#' onclick='return change("@i.Text",this,"ProjectStatus")'>@i.Text</a>
                            </li>
                        }
        
                    </ul>
                </li>
                <li>
                    <a class="dropdown-item" href="#">
                        DevelopmentStatus &raquo;
                    </a>
                    <ul class="dropdown-menu dropdown-submenu">
                        @foreach (var i in ViewBag.DevelopmentStatus)
                        {
                            <li>
                                <a class="dropdown-item" href='#' onclick='return change("@i.Text",this,"DevelopmentStatus")'>@i.Text</a>
                            </li>
                        }
                    </ul>
                </li>
            </ul>
        </div>
        <input id="ProjectStatus" name="ProjectStatus" hidden />
        <input id="DevelopmentStatus" name="DevelopmentStatus" hidden />
    <script>
        function change(text, t, type) {
            $("li").css("background", "transparent");
            if (type == "ProjectStatus") {
                $("#ProjectStatus").val(text);
                $("#DevelopmentStatus").val("");
            } else {
                $("#DevelopmentStatus").val(text);
                $("#ProjectStatus").val("");
            }
            $(t).parent().css("background", "#1266f1");
            return false;
        }
    </script>
    

    选择ProjectStatus时,选择的值会被放到$("#ProjectStatus")$("#DevelopmentStatus")的值会是""。选择DevelopmentStatus时,选择的值会被放到$("#DevelopmentStatus"),而$("#ProjectStatus") 将是 ""

    结果:

    【讨论】:

    • 这可以工作,但只有一个数据正在传输到控制器,项目状态或开发状态。而且您还为我提供了多级的代码,现在加载碎石需要很长时间(我认为由于您提供的那些链接)您可以在没有这些链接的情况下进行下拉,以便页面加载更快。而且这个多级下拉菜单在调试模式下不起作用,所以我在其中找不到错误。请调查这些问题。谢谢你..
    • 首先,只有名称正确的隐藏输入的值才会被绑定。如果要绑定其他数据,则需要创建其他输入,并且您没有显示您的模型项目或数据你想绑定。然后链接确保你可以使用官方doc中所说的多级。
    • 非常感谢...问题是您在选择一个时输入 null ,实际上我需要这两个输入。我已经更正了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-24
    • 2019-02-02
    相关资源
    最近更新 更多