在.Net Core剃须刀页面中传递路由参数

时间:2019-12-10 16:23:47

标签: asp.net-core mvvm razor-pages

我想将参数传递给OnGet()方法,但它不稳定,每次都不同,例如:

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

参数不稳定,会动态创建。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

您可以使用@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
}

您不知道URL的确切结构

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

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

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

相关问题