我是ASP.NET新手,有WinForms和WPF经验。放轻松我。
当我的页面加载时,它会访问数据库并查询表格以选择放入下拉列表。现在,如果您在页面上进行回发,是否重新加载form_load中的值?似乎没必要两次点击数据库。我的假设是我把form_load,我点击数据库中的枚举,然后用我找到的值填充下拉列表。
答案 0 :(得分:2)
您可以使用Page.IsPostBack属性控制回发期间调用的内容。它返回一个布尔值,指示页面何时处于回发中。例如:
public partial class _Default : System.Web.UI.Page {
protected void Page_Load(object sender, EventArgs e) {
if (!this.IsPostBack) {
// fill the enums
}
}
}
答案 1 :(得分:2)
使用Cache
对象并将数据库结果存储在缓存中。
答案 2 :(得分:1)
这些可以在应用程序启动时在Application对象中加载。我想他们不会经常改变。
然后从那里使用。对于那些很少改变的“目录”(每年一次或更少),我经常将它们硬编码为枚举类型。
编辑:
对于诸如PaymentStatus之类的枚举,这些枚举很少或者从来没有将c#枚举映射到具有相同数值的目录,正如Randolpho所说的那样。对于其他人在HttpRuntimeCache对象中缓存(“缓存”)并将绝对过期或者放入SqlDependency
答案 3 :(得分:1)
我假设你在谈论一个“查找表”,基本上是一个具有{Id,Name}模式并且从另一个表引用为外键的东西,对吗?
这是一个古老的问题,而且没有“正确”的答案。
如果您的枚举可能完全改变(可能由管理用户控制),您将无法使用@Andrei Rinea的建议,因为您需要刷新数据库中的值。最终,你会做得最好,就像Keltex建议的那样,并以短暂的过期缓存结果 - 可能只需要5分钟。如果您负载很重,那么少量缓存可以提高性能。
如果您的枚举不太可能改变...特别是如果管理员无法通过UI修改它,那么我喜欢做一个有趣的技巧,即将枚举映射到实际的C#枚举,其值为enum
直接绑定到枚举表的主键。通过这种方式,您可以根本不必访问数据库以获取可能值的列表。
这个技巧的缺点是新的枚举项需要对代码和新部署进行新的编译。这可能是理想的,也可能不是理想的,所以请谨慎使用。