假设我正在创建一个网站来显示客户订单。我想让页面显示:
如果我创建一些Razor页面,则可能会具有以下结构:
[Pages]
Index.cshtml
[Customer]
Index.cshtml
[Order]
Index.cshtml
顶层页面(客户列表)没有参数,因此该URL仅为/
。
客户页面(客户的订单列表)需要一个客户ID,因此我可以将@page "{customerId}
放在.cshtml文件的顶部。这样它的URL将为/Customer/123
。
到目前为止,太好了。该网址很有意义。
现在进入订单详细信息页面。这需要一个订单号,因此我们将@page "{orderNo}"
放在.cshtml文件的顶部。其URL为... /Customer/Order/54321
。嗯...我已经从网址中丢失了客户ID。
我可以通过使@page
伪指令包含它(@page "{customerId}/{orderNo}"
)来重新添加客户ID,但是URL为/Customer/Order/123/54321
-看起来不太好。
我如何使URL看起来像/Customer/123/Order/54321
?
答案 0 :(得分:1)
您可以使用override route template来抵消框架生成的基于路径的路由。替代路由以前导mscomctl.ocx
开头。在您的示例中,解决方案是:
/
请注意,这样做的好处是在站点结构发生更改时保持鲁棒性。例如,您将来可能会决定将 Order 文件夹嵌套在 Customer 文件夹中会阻止发现,但是替代路由将确保在同一页面上找到该页面。 URL,无论您将源文件移动到 Pages 文件夹内的位置。