具有多个参数的ASP.NET核心路由

具有多个参数的ASP.NET核心路由,asp.net,asp.net-core,model-view-controller,Asp.net,Asp.net Core,Model View Controller,应用程序中有四个下拉按钮。下拉列表中的选项是链接。其中一个的代码: <li><a asp-controller="Aircrafts" asp-action="Compare" asp-route-vehicle1="@item.Id">@item.Name</a></li> 路由: endpoints.MapControllerRoute( name: "FourParameters", pattern: "controller=Aircra

应用程序中有四个下拉按钮。下拉列表中的选项是链接。其中一个的代码:

<li><a asp-controller="Aircrafts" asp-action="Compare" 
asp-route-vehicle1="@item.Id">@item.Name</a></li>
路由:

endpoints.MapControllerRoute(
name: "FourParameters",
pattern: "controller=Aircrafts}/{action=Compare}/{vehicle1=0}/{vehicle2=0}/{vehicle3=0}/{vehicle4=0}");
任务:当用户单击下拉列表的任何链接时,例如,在第三个链接上,有必要创建如下地址: 飞机/比较/0/0/5/0
调用控制器中的方法,如果他单击第四个,则地址应为: 飞机/比较/0/0/5/8等


但在我的实现中,控制器方法只有在单击第四个下拉菜单后才被调用。这是一个问题。

如果您想保留之前传递的参数值,我建议您使用ajax进行传递

代码如下:

@model IEnumerable
@{
ViewData[“标题”]=“比较”;
布局=空;
}
$(函数(){
var paramObj={
“车辆1”:0,
“车辆2”:0,
“车辆3”:0,
“车辆4”:0,
}
$(“.下拉菜单a”)。单击(函数(){
event.preventDefault();
var url=“/Aircrafts/compare”;
var车辆=$(本).attr(“车辆”);
var value=$(this.attr(“value”);
paramObj[vehicle]=parseInt(值);
for(paramObj中的var键){
url+=“/”+paramObj[key];
}
$.ajax({
键入:“获取”,
url:url,
成功:功能(响应){
window.history.pushState(“,”,url);
},
故障:功能(响应){
警报(响应);
}
});
});
});
比较
下拉列表1
    @foreach(模型中的var项目) {
  • @项目名称
  • }

下拉列表2
    @foreach(模型中的var项目) {
  • @项目名称
  • }

下拉列表3
    @foreach(模型中的var项目) {
  • @项目名称
  • }

下拉列表4
    @foreach(模型中的var项目) {
  • @项目名称
  • }

如果您想保留之前传递的参数值,我建议您使用ajax进行传递

代码如下:

@model IEnumerable
@{
ViewData[“标题”]=“比较”;
布局=空;
}
$(函数(){
var paramObj={
“车辆1”:0,
“车辆2”:0,
“车辆3”:0,
“车辆4”:0,
}
$(“.下拉菜单a”)。单击(函数(){
event.preventDefault();
var url=“/Aircrafts/compare”;
var车辆=$(本).attr(“车辆”);
var value=$(this.attr(“value”);
paramObj[vehicle]=parseInt(值);
for(paramObj中的var键){
url+=“/”+paramObj[key];
}
$.ajax({
键入:“获取”,
url:url,
成功:功能(响应){
window.history.pushState(“,”,url);
},
故障:功能(响应){
警报(响应);
}
});
});
});
比较
下拉列表1
    @foreach(模型中的var项目) {
  • @项目名称
  • }

下拉列表2
    @foreach(模型中的var项目) {
  • @项目名称
  • }

下拉列表3
    @foreach(模型中的var项目) {
  • @项目名称
  • }

下拉列表4
    @foreach(模型中的var项目) {
  • @项目名称
  • }

事实证明,我的解决方案很好。 只需删除属性参数:

[HttpGet("compare/{vehicle1}/{vehicle2}/{vehicle3}/{vehicle4}")]
致:


所有的工作都如期进行,结果证明,我的解决方案是好的。 只需删除属性参数:

[HttpGet("compare/{vehicle1}/{vehicle2}/{vehicle3}/{vehicle4}")]
致:


与路径变量相比,所有按预期工作的查询字符串似乎更适合此操作。查询字符串与路径变量相比,似乎更适合此操作。谢谢。我只需删除[HttpGet]属性中的参数就解决了问题。但你的牙齿很好。我只需删除[HttpGet]属性中的参数就解决了问题。但你的解决方案也很好
[HttpGet]