具有两个参数的 MVC6 属性路由
MVC6 attribute routing with two parameters
我已经四处查看了这个,但没有任何与 MVC6 taghelper 锚标记有关的替代 [HttpGet] 方法可以满足多个参数的要求。
当然,您可以将多个参数添加到 MVC6 锚点标签助手,但是如何使用属性路由处理带有两个参数的第二个选项...
我有两个 [HttpGet] IactionResult 方法:
//GET: UserAdmin
public async Task<IActionResult> Index()
{
return View(await _userAdminService.GetAllUsers("name_desc", false));
}
// GET: UserAdmin/name_desc/True
[HttpGet("Index/{sortValue}&{showDeactivated}")]
public async Task<IActionResult> Index(string sortValue, bool showDeactivated)
{
return View(await _userAdminService.GetAllUsers(sortValue, showDeactivated));
}
我认为我尝试使用第二种方法:
<a asp-action="Index" asp-route-sortValue="@Model.DisplayName" asp-route-showActivated="@Model.ShowDeActivated">Name: <span class="glyphicon glyphicon-chevron-down"></span></a>
呈现为:
<a href="/UserAdmin?sortValue=name showActivated=True">Name: <span class="glyphicon glyphicon-chevron-down"></span></a>
或
localhost.../UserAdmin?sorValue=name&showActivated=True
它永远不会使用第二种方法。
使用 MVC6 锚点标记帮助器使用带有两个参数的第二个 [HttpGet] 方法需要做什么?
编辑
还有你如何处理路由属性中分隔两个参数的符号...
路由模板中不支持 & 符号。这个想法是,&符号用于查询字符串,它将始终应用于任何路由模板。这就是为什么你的第二个动作永远不会被调用。
例如,您可以将路线模板更改为
[HttpGet("UserAdmin/Index/{sortValue}/{showDeactivated}")]
官方文档link
在这种情况下不要分散你的行动。您只需一次操作即可轻松完成此操作:
public async Task<IActionResult> Index(string sortValue, bool showDeactivated)
{
var sort = string.IsNullOrWhiteSpace(sortValue) ? "name_desc" : sortValue;
return View(await _userAdminService.GetAllUsers(sort, showDeactivated));
}
如果未提供 sortValue
GET 参数,它将默认为 null
,如果未提供 showDeactivated
,它将默认为 false
.
ASP.NET 核心的最新版本可以处理这个:
[HttpGet("Index")]
public async Task<IActionResult> Index([FromQuery(Name ="sortValue")]string sortValue,[FromQuery(Name ="showDeactivated")] bool showDeactivated)
我已经四处查看了这个,但没有任何与 MVC6 taghelper 锚标记有关的替代 [HttpGet] 方法可以满足多个参数的要求。
当然,您可以将多个参数添加到 MVC6 锚点标签助手,但是如何使用属性路由处理带有两个参数的第二个选项...
我有两个 [HttpGet] IactionResult 方法:
//GET: UserAdmin
public async Task<IActionResult> Index()
{
return View(await _userAdminService.GetAllUsers("name_desc", false));
}
// GET: UserAdmin/name_desc/True
[HttpGet("Index/{sortValue}&{showDeactivated}")]
public async Task<IActionResult> Index(string sortValue, bool showDeactivated)
{
return View(await _userAdminService.GetAllUsers(sortValue, showDeactivated));
}
我认为我尝试使用第二种方法:
<a asp-action="Index" asp-route-sortValue="@Model.DisplayName" asp-route-showActivated="@Model.ShowDeActivated">Name: <span class="glyphicon glyphicon-chevron-down"></span></a>
呈现为:
<a href="/UserAdmin?sortValue=name showActivated=True">Name: <span class="glyphicon glyphicon-chevron-down"></span></a>
或
localhost.../UserAdmin?sorValue=name&showActivated=True
它永远不会使用第二种方法。
使用 MVC6 锚点标记帮助器使用带有两个参数的第二个 [HttpGet] 方法需要做什么?
编辑
还有你如何处理路由属性中分隔两个参数的符号...
路由模板中不支持 & 符号。这个想法是,&符号用于查询字符串,它将始终应用于任何路由模板。这就是为什么你的第二个动作永远不会被调用。
例如,您可以将路线模板更改为
[HttpGet("UserAdmin/Index/{sortValue}/{showDeactivated}")]
官方文档link
在这种情况下不要分散你的行动。您只需一次操作即可轻松完成此操作:
public async Task<IActionResult> Index(string sortValue, bool showDeactivated)
{
var sort = string.IsNullOrWhiteSpace(sortValue) ? "name_desc" : sortValue;
return View(await _userAdminService.GetAllUsers(sort, showDeactivated));
}
如果未提供 sortValue
GET 参数,它将默认为 null
,如果未提供 showDeactivated
,它将默认为 false
.
ASP.NET 核心的最新版本可以处理这个:
[HttpGet("Index")]
public async Task<IActionResult> Index([FromQuery(Name ="sortValue")]string sortValue,[FromQuery(Name ="showDeactivated")] bool showDeactivated)