3

我已经环顾四周,没有任何与 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

IT 从不采用第二种方法。

我需要做什么才能使用 MVC6 锚 taghelper 使用带有两个参数的第二个 [HttpGet] 方法?

编辑

另外,您如何处理分隔路由属性中两个参数的 & 符号...

4

3 回答 3

4

路由模板中不支持 & 符号。这个想法是&符号用于查询字符串,它将始终应用于任何路由模板。这就是为什么你的第二个动作永远不会被调用的原因。

例如,您可以将路线模板更改为 [HttpGet("UserAdmin/Index/{sortValue}/{showDeactivated}")]

官方文档链接

于 2016-05-06T07:29:27.437 回答
3

在这种情况下,不要分开你的行动。您可以在一个操作中轻松完成此操作:

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

于 2016-05-06T15:14:30.820 回答
1

最新版本的 ASP.NET Core 可以处理这个问题:

[HttpGet("Index")]
public async Task<IActionResult> Index([FromQuery(Name ="sortValue")]string sortValue,[FromQuery(Name ="showDeactivated")] bool showDeactivated)
于 2017-08-21T15:57:06.783 回答