MVC6属性路由有两个参数

时间:2016-05-06 02:51:09

标签: asp.net-core asp.net-core-mvc tag-helpers

我已经浏览了这个,并没有任何与MVC6 taghelper锚标签相关的东西,而是有一个替代的[HttpGet]方法,可以满足多个参数。

当然可以将多个参数添加到MVC6锚标记器中,但是如何使用attrubute路由处理第二个选项和两个参数...

我有两个[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锚标记器将第二个[HttpGet]方法与两个参数一起使用需要做什么?

修改

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

3 个答案:

答案 0 :(得分:4)

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

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

官方文件link

答案 1 :(得分: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

答案 2 :(得分:1)

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

let value = Bird.physicsBody!.velocity.dy * ( Bird.physicsBody!.velocity.dy < 0 ? 0.005 : 0.001 )
Bird.zRotation = min( max(-0.5 //determines how much rotation when falling down, value), 1 //determines how much when jumping up )