首页 > 解决方案 > 覆盖 PageModel() 构造函数以设置默认属性(Razor 页面)

问题描述

我是 Razor Pages 的新手,正在寻找解决问题的最佳方法。

假设我有一个 IndexModel 类,它具有一些依赖于通过构造函数注入的数据库上下文的属性,例如直接来自表的成员级别的下拉列表......

我的问题是处理填充此下拉列表的最佳方法是什么,该下拉列表适用于导致重新加载/返回同一页面的所有请求。我知道我可以在 OnGet 中放入逻辑来设置列表,如果在 OnPost 中说,ModelState.IsValid 为 false,则会出现问题,因此使用 Page() 返回页面。如果我没有在 OnPost 中明确地重新初始化选择列表,那么我会得到一个空引用异常,这很公平。在 OnPost 方法中重写代码违反了 DRY 原则,因此我希望在需要时在类中编写一个 ConfirgureProperties() 方法。

然后通过测试,我发现我可以设置一个构造函数,它会在需要时为我填充属性,而我不必调用其他任何东西。即使涉及 DI,注入也是在构造函数的顶部解决的,然后我可以使用上下文来为构造函数中的其他属性做我需要的事情。我在网上的任何地方都没有看到这样的例子,我只看到人们在专门处理 DI 的页面模型中使用构造函数。

是否有我不应该这样做的原因,比如糟糕的编码习惯或其他什么,或者我可以以这种方式使用页面模型构造器吗?

谢谢

标签: c#razorrazor-pages

解决方案


OnPost如果 ModelState 无效,您只需要进行数据库调用以重新填充选项。很有可能,如果您正确设置了验证,则 99% 的时间验证错误将在客户端上被捕获,并且您无需重新填充选项。

从数据库中获取数据的成本很高,您应该只在必要时才这样做。所以使用构造函数的方法违反了这个原则。

你也没有节省很多代码。您的ConfigureProperties方法只会在 PageModel 中的两个地方被调用。


推荐阅读