2017-06-15 129 views
3

我很好奇asp-route- *标签助手是如何工作的。我所理解的是,它对我设置的路由有一定的约束。例如。ASP.NET核心路由标签助手使用路由?

routes.MapRoute(
    name: null, 
    template: "{category}/Page{page:int}", 
    defaults: new { controller = "Product", action = "List" } 
); 

在这里,我映射我的路线如下:/分类/的PageNumber在控制器“产品”

行动“清单”将下面的代码,点击后按照前面的图路线

<a class="btn btn-block 
    @(cat == ViewBag.SelectedCategory ? "btn-primary" : "btn-default")" 
    asp-controller="Product" 
    asp-action="List" 
    asp-route-category="@cat" 
    asp-route-page="1">@cat</a> 

因此,我的理解是,“asp-route-category”将在我的routeMap模板中搜索“{category}”,然后“asp-route-page”将在routeMap模板中搜索“{page}” ?

关于MS的文档有点令人困惑或只是为了抽象,有人能以更好的方式证实或解释这一点吗?

回答

3

当使用conventional routing时,与您一样,controlleraction参数是必需的,并映射到您的控制器和操作名称。

所以,如果你想路由到行动List在控制器Product与 类别和页面参数,你的路由应该是这样的:

routes.MapRoute(
    name: null, 
    template: "{controller}/{action}/{category}/Page{page:int}", 
    defaults: new { controller = "Product", action = "List" } 
); 

更新:

的您正在使用的Tag Helpers中的asp-route属性将为路由值提供参数。

因此,基本上,asp-route-MyParameter将添加MyParameter来路由具有指定值的值。

More Information here

+0

这部分很清楚,我对“asp-route-x”部分更加困惑。 “x”可以是任何东西,对吧?但它必须与你的地图路线中的某些东西相匹配? – TanguyB

+0

查看已更新的答案 –