c# - 覆盖 PageModel() 构造函数以设置默认属性(Razor 页面)
问题描述
我是 Razor Pages 的新手,正在寻找解决问题的最佳方法。
假设我有一个 IndexModel 类,它具有一些依赖于通过构造函数注入的数据库上下文的属性,例如直接来自表的成员级别的下拉列表......
我的问题是处理填充此下拉列表的最佳方法是什么,该下拉列表适用于导致重新加载/返回同一页面的所有请求。我知道我可以在 OnGet 中放入逻辑来设置列表,如果在 OnPost 中说,ModelState.IsValid 为 false,则会出现问题,因此使用 Page() 返回页面。如果我没有在 OnPost 中明确地重新初始化选择列表,那么我会得到一个空引用异常,这很公平。在 OnPost 方法中重写代码违反了 DRY 原则,因此我希望在需要时在类中编写一个 ConfirgureProperties() 方法。
然后通过测试,我发现我可以设置一个构造函数,它会在需要时为我填充属性,而我不必调用其他任何东西。即使涉及 DI,注入也是在构造函数的顶部解决的,然后我可以使用上下文来为构造函数中的其他属性做我需要的事情。我在网上的任何地方都没有看到这样的例子,我只看到人们在专门处理 DI 的页面模型中使用构造函数。
是否有我不应该这样做的原因,比如糟糕的编码习惯或其他什么,或者我可以以这种方式使用页面模型构造器吗?
谢谢
解决方案
OnPost
如果 ModelState 无效,您只需要进行数据库调用以重新填充选项。很有可能,如果您正确设置了验证,则 99% 的时间验证错误将在客户端上被捕获,并且您无需重新填充选项。
从数据库中获取数据的成本很高,您应该只在必要时才这样做。所以使用构造函数的方法违反了这个原则。
你也没有节省很多代码。您的ConfigureProperties
方法只会在 PageModel 中的两个地方被调用。
推荐阅读
- sql - select语句中函数超过窗口函数的SQL函数
- matlab - 使用深度神经网络学习 XOR
- unity3d - User32.dll SetForegroundWindow 不起作用
- python - Matplotlib 中使用 Numpy 的条件着色 where
- c++ - c++ - 在向量中使用 std::filesystem::path 时双重释放
- python - Tkinter 根窗口在 Withdraw() 后消失
- xamarin - 反序列化 Google-services.json 文件时出错
- python - 如果存在,则使用对象的全局版本
- postgresql - 如何使用实体框架扩展库批量更新 jsonb 字段?
- java - 如何在搜索视图中强制写大写?