如何将数据从 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
}
我相信这就是您要找的,传递路由值
<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>
我在 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
}
我相信这就是您要找的,传递路由值
<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>