ASP.NET 核心 MVC:如何将 QueryString 参数更改为 "pretty" URL 参数?

ASP.NET Core MVC: How to change QueryString param into "pretty" URL param?

我的问题是审美问题。我有以下控制器:

[HttpGet("[action]/{EmployeeTypeID:int?}")]
public IActionResult FilterByType(int EmployeeTypeID = 1)
{ ... }

当我转到以下路线时调用,例如:

/Employees/FilterByType
/Employees/FilterByType/2

太棒了。控制器 returns 以下 ViewModel 到视图:

public class EmployeesByTypeViewModel
{
    public IEnumerable<Employee> FilteredEmployees { get; set; }
    public IEnumerable<SelectListItem> EmployeeTypes { get; set; }
    public int EmployeeTypeID { get; set; }
}

在我看来,有一个下拉菜单 应该 更改 URL 参数(以便按不同的员工类型进行过滤):

@model Tiendas.Models.EmployeesByTypeViewModel  
<h2>Employees</h2>
<form asp-controller="Employees" asp-action="FilterByType" method="GET">
    <select asp-for="EmployeeTypeID" asp-items="Model.EmployeeTypes">
    </select>
    <button type="submit">Filter</button>
</form>
//code displaying filtered employees...

但是,当我在 /Employees/FilterByType 时,我提交了它生成的表单,例如:

/Employees/FilterByType?EmployeeTypeID=3

而不是:

/Employees/FilterByType/3

这就是我想要的(功能方面两者都有效)。此外,如果我在上面键入 URL 然后提交表单,我会得到以下信息:

/Employees/FilterByType/3?EmployeeTypeID=1

如何获得 pretty URL 参数而不是 QueryString?我正在使用属性路由。

您有一个正在生成 GET 的表单。浏览器不知道您的路由定义,并且根据标准,任何表单控件的值都将添加为查询字符串值。

如果要生成/Employees/FilterByType/3,则需要javascript/jquery生成url,location.href进行重定向,例如[=13] =]

$('form').submit(function(e) {
    e.preventDefault(); // cancel the default action
    baseUrl = '@Url.Action("FilterByType", "Employees")';
    var selectedEmployee = $('#EmployeeTypeID').val();
    location.href = baseUrl + '/' + selectedEmployee; // redirect
});