gpt4 book ai didi

c# - 当我使用类类型作为参数时,为什么我的 Razor 页面中的模型状态无效?

转载 作者:行者123 更新时间:2023-11-30 15:13:32 24 4
gpt4 key购买 nike

这是我第一次在 ASP.Net Core 2.2 中使用 Razor Pages,我正在使用页面过滤器来检查 ModelState.IsValidGET 上返回 false当我在 OnGet() 中使用类型时请求导致页面失败的方法参数。如果我更改方法的签名以使用原始类型,则模型状态有效。

例子如下:

ModelState.IsValid以下代码为 false,它在 ASP.Net Core 2.2 MVC 中的 Controller 操作中运行良好:

public class IndexModel : PageModel
{
public string IsValid { get; set; }

public void OnGet(Query query)
{
// FALSE
IsValid = ModelState.IsValid.ToString();
}

public class Query
{
public int? Page { get; set; }
}
}

但对于以下情况是正确的:

public class IndexModel : PageModel
{
public string IsValid { get; set; }

public void OnGet(int? query)
{
// TRUE
IsValid = ModelState.IsValid.ToString();
}
}

为什么会这样?

最佳答案

而不是应用 Query类型作为 OnGet 的参数方法,您可以将其添加为 PageModel 属性,并用 BindProperty 修饰属性:

public class IndexModel : PageModel
{
public string IsValid { get; set; }

[BindProperty(SupportsGet=true)]
public Query query { get; set; }

public void OnGet()
{

}

public class Query
{
public int? Page { get; set; }
}
}

BindProperty使用属性,您必须选择在 GET 中进行绑定(bind)请求(因此 SupportsGet=true ),但是当您使用 PageModel 属性时,您不需要告诉模型绑定(bind)从哪里获取值。它会自动搜索查询字符串、请求体、路由数据等。

更多信息:https://www.learnrazorpages.com/razor-pages/model-binding#binding-data-from-get-requests

关于c# - 当我使用类类型作为参数时,为什么我的 Razor 页面中的模型状态无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57887219/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com