如何将数据从 bootstrap 菜单项发送到 ASP.NET MVC 控制器

How to send data from a bootstrap menu item to an ASP.NET MVC controller

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

        <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 将传递给控制器​​。

这可能吗?

试试这个

<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>

这样试试:

<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

我相信这就是您要找的,传递路由值

<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>