在 .Net Core razor 页面中传递路由参数

Posted

技术标签:

【中文标题】在 .Net Core razor 页面中传递路由参数【英文标题】:Passing route parameters in .Net Core razor pages 【发布时间】:2020-04-03 21:31:26 【问题描述】:

我想给OnGet()方法传参数但是不稳定,每次都不一样,例如:

test.com/book
test.com/book/page/word
test.com/book/page
test.com/book/page/word/...

参数不稳定,是动态创建的。

我该如何处理这个问题?

【问题讨论】:

【参考方案1】:

您可以使用@page directive 处理此问题。

根据您的实际需要有多种选择。

你提前知道你的网址结构

.cshtml 页面中,添加@page 指令,每个可选参数后跟一个问号。请注意,您还可以指定constraints 来指定特定参数需要是某种类型,例如整数(例如,这里line 是可选整数)。

@page "/book/pageName?/line:int?/word?"

在您的模型类中,添加与 @page 指令中的名称匹配的可空可选参数:

public void OnGet([FromRoute] string pageName= null, [FromRoute] int? line = null, [FromRoute] string word = null)

    // TODO handle parameters
    // note that line is guaranteed to be an integer

您不知道网址的确切结构

在这种情况下,您可以使用通配符参数,在参数名称前用星号指定:

@page "/book/*content"
public void OnGet([FromRoute] string content= null)

    // TODO handle content

在这种情况下,content 将包含在/book/ 之后传递的整个字符串,包括正斜杠,例如page/word/5/test。然后,您可以根据需要对其进行处理。

【讨论】:

需要注意多个可选参数:mikesdotnetting.com/article/339/…

以上是关于在 .Net Core razor 页面中传递路由参数的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Core 3.1 Razor 页面路由不明确匹配异常

如何使用 Url.Action 在 asp.net core 2.0 razor 页面中传递多个操作

使用 ASP NET Core 2.0 Razor 页面进行路由

将数据从 javascript 传递到 asp.net core 2 razor 页面方法

具有多个路由参数的 ASP.NET Core Razor 页面层次结构

如何在 ASP.NET Core Razor 页面中绑定复杂列表