ASP.NET Core MVC:如何将QueryString param更改为" pretty"网址参数?

时间:2018-03-23 02:37:09

标签: asp.net-core-mvc asp.net-mvc-routing

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

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

当我进入以下路线时会调用它,例如:

/Employees/FilterByType
/Employees/FilterByType/2

大。控制器将以下ViewModel返回到视图:

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

我的观点是,应该更改URL参数的下拉列表(以便按其他EmployeeType进行过滤):

@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

如何获取漂亮的 URL参数而不是QueryString?我使用属性路由。

1 个答案:

答案 0 :(得分:1)

你有一个正在进行GET的表单。浏览器不了解您的路由定义,并且根据标准,任何表单控件的值都会添加为查询字符串值。

如果你想生成 WITH CustomerDistribution_CTE (WeekC ,CustomerC, ProductC) AS ( select Week, Customer, product from Your_Table_Name group by Week, Customer, product having count(distinct CustomerType) > 1 ) SELECT Y.* FROM CustomerDistribution_CTE C inner join Your_Table_Name Y on C.WeekC =Y.Week and C.CustomerC =Y.Customer and C.productC =Y.product ,那么你需要javascript / jquery来生成网址,而/Employees/FilterByType/3来生成重定向,例如

location.href