【问题标题】:Overriding the PageModel() constructer for setting up default properties (Razor Pages)覆盖 PageModel() 构造函数以设置默认属性(Razor 页面)
【发布时间】:2021-05-21 04:48:12
【问题描述】:

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

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

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

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

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

谢谢

【问题讨论】:

    标签: c# razor razor-pages


    【解决方案1】:

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

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

    您也没有节省大量代码。您的 ConfigureProperties 方法只会在 PageModel 中的两个位置调用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-09
      • 2022-01-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多