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
});
我的问题是审美问题。我有以下控制器:
[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
});