我的问题是美学问题。我有以下控制器:
[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?我使用属性路由。
答案 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