【问题标题】:How to send data from a bootstrap menu item to an ASP.NET MVC controller如何将数据从引导菜单项发送到 ASP.NET MVC 控制器
【发布时间】:2022-01-11 17:53:23
【问题描述】:

我在 C# Web 应用程序中有一个引导菜单。菜单如下所示:

        <nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
        <div class="container">
            <a class="navbar-brand" asp-area="" asp-controller="Home" asp-action="Index">realestate</a>
            <button class="navbar-toggler" type="button" data-toggle="collapse" data-target=".navbar-collapse" aria-controls="navbarSupportedContent"
                    aria-expanded="false" aria-label="Toggle navigation">
                <span class="navbar-toggler-icon"></span>
            </button>
            <div class="navbar-collapse collapse d-sm-inline-flex flex-sm-row-reverse">
                <ul class="navbar-nav flex-grow-1">
                    <li class="nav-item">
                        <a class="nav-link text-dark" asp-area="" asp-controller="Newquestion" asp-action="Index">Add New Questions</a>
                    </li>
                    <li class="nav-item dropdown">
                        <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                            Chapter
                        </a>
                        <div class="dropdown-menu" aria-labelledby="navbarDropdown">
                            <a class="dropdown-item" asp-controller="Question" asp-action="Index">Salesperson questions - Chapter 1</a>
                        </div>
                    </li>
                </ul>
            </div>
        </div>
    </nav>

我有一个名为 QuestionController.cs 的控制器,当用户单击下拉菜单并选择“销售人员问题 - 第 1 章”的菜单选项时,它会获得控制权。这一切都很好。

如果我想添加另一个菜单选项,比如“销售人员问题 - 第 2 章”,我可以使用同一个控制器吗?我想将一段数据传递给控制器​​,以便控制器知道选择了哪个菜单选项。我想做这样的事情:

<div class="dropdown-menu" aria-labelledby="navbarDropdown">
    <a class="dropdown-item" asp-controller="Question" asp-action="Index(0)">Salesperson questions - Chapter 1</a>
    <a class="dropdown-item" asp-controller="Question" asp-action="Index(1)">Salesperson questions - Chapter 2</a>
</div>

因此,在上面的代码中,如果用户选择了第 1 章选项,则会将值 0 传递给控制器​​。如果用户选择第 2 章选项,则将值 1 传递给控制器​​。

这可能吗?

【问题讨论】:

    标签: c# asp.net-mvc bootstrap-4


    【解决方案1】:

    试试这样:

    <div class="dropdown-menu" aria-labelledby="navbarDropdown">
        <a class="dropdown-item" asp-controller="Question" asp-action="Index" asp-route-id="0">Salesperson questions - Chapter 1</a>
        <a class="dropdown-item" asp-controller="Question" asp-action="Index" asp-route-id="1">Salesperson questions - Chapter 2</a>
    </div>
    

    像这样在您的操作中捕获 id:

    public IActionResult MyAction(int? id)
    {
        //do something with that id
    }
    

    你可以放任何东西而不是 id。但是您必须在该操作中使用该变量名。假设您可以使用 asp-route-name="john"。比你必须在那个动作中抓住名字。 如果您有匹配的名称路由,则 url 将是这样的

    controller/action/john
    

    但如果它与启动中定义的路由不匹配,那么它将像这样包装到查询参数中

    controller/action?name=john
    

    如果是查询参数,您必须像这样捕获变量

    public IActionResult YourAction([FromQuery(Name = "name")] string name)
    {
        // do whatever with that name
    }
    

    更多详情https://docs.microsoft.com/en-us/aspnet/core/mvc/views/tag-helpers/built-in/anchor-tag-helper?view=aspnetcore-6.0#asp-route-value

    【讨论】:

    • 正是我想要的!我设置了一个断点,发现传入的值是((object[])this.ControllerContext.RouteData.Values.Values)[2]。这是我应该从中获取 id 值的地方,还是有首选的方法/变量?
    • 如果解决了你的问题,那么你可以接受答案。这对你来说似乎很合适。你也可以投票。
    • 答案更新了你如何在动作中捕获变量的部分
    【解决方案2】:

    试试这个

    <a class="dropdown-item" asp-controller="Question" asp-action="Index"  asp-route-id="1"> Salesperson questions - Chapter 1 </a>
    <a class="dropdown-item" asp-controller="Question" asp-action="Index"  asp-route-id="2"> Salesperson questions - Chapter 2 </a>
    

    【讨论】:

      【解决方案3】:

      我相信这就是你要找的,传递路线价值

      <a asp-controller="Employee"
         asp-action="Index" 
         asp-route-id="@Model.Id">EmployeeId: @Model.Id</a>
      

      或将静态值传递给操作

      <a asp-controller="Question"
         asp-action="Index" 
         asp-route-id="1">Menu Item 1</a>
      

      【讨论】:

        猜你喜欢
        • 2018-04-28
        • 2013-09-28
        • 2017-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-22
        • 1970-01-01
        • 2020-10-21
        相关资源
        最近更新 更多