Razor 页面中绑定查询参数的规则

Posted

技术标签:

【中文标题】Razor 页面中绑定查询参数的规则【英文标题】:Rules for binding query parameters in Razor Pages 【发布时间】:2020-05-30 13:58:13 【问题描述】:

在 Razor Pages 中,如果您要调用,例如,非常方便,

http://localhost/foo?bar=42

在对应的模型中,bar 键可以在OnGet 构造函数中自动访问

public IActionResult OnGet(int bar)

    System.Console.WriteLine($"bar is bar");

但是如果查询参数是poo呢?

http://localhost/foo?poo=42

那么在模型中,bar 没有得到值 42。

如此简单,获取变量以匹配查询参数键。但是如果键是连字符的呢?

http://localhost/foo?foo-bar=42

foo-bar 绝对不是一个可接受的变量名。如何访问此查询参数?这里有什么规则?

在我的具体情况下,我别无选择,只能接收这些带连字符的查询字符串参数。另外,我在.net core 2.2

【问题讨论】:

【参考方案1】:

认为 heiphens 用下划线表示,所以foo-bar 变成了foo_bar,但这违反了标准 C# 命名约定。

无论如何,我不建议将查询参数绑定为处理程序参数。最干净的解决方案是在您的 PageModel 上定义一个属性,如下所示:

// from the Microsoft.AspNetCore.Mvc namespace
[FromQuery(Name = "foo-bar")]
public string FooBar  get; set; 

这样,只要提供与该名称匹配的查询参数,它就会始终被绑定。无论特定的处理程序是否请求它。然后,您可以在需要时访问 PageModel 上的属性。所以你的示例方法变为:

public void OnGet()

    System.Console.WriteLine($"bar is FooBar");

【讨论】:

【参考方案2】:

Razor Pages 中最简单的解决方案是使用Request.Query

public void OnGet()

    var data = Request.Query["foo-bar"];

【讨论】:

以上是关于Razor 页面中绑定查询参数的规则的主要内容,如果未能解决你的问题,请参考以下文章

Razor Pages:在链接中传递查询参数

模型绑定来自 Razor 页面发布表单上的路由参数

Razor 页面链接忽略路由参数

如何从 MVC Razor 标记中获取查询字符串参数?

如何更改绑定到 Razor 页面上模型的特定文本的字体颜色?

带有内联样式表和媒体查询的 Razor 视图 [重复]