我有一个asp.net 4.0 c#web应用程序。我在表单上使用listview和formview控件和模板。我试图控制绑定文本框的maxlength属性,而无需将字段大小硬编码到我的aspx页面中。我想在第一次加载应用程序时填充某些本地对象或数组,其中包含我的字段的列长度,然后使用这些值动态设置文本框的maxLength字段。 有很多方法可以尝试,我不确定什么是最有效的。 我的sql获取架构信息是
SELECT TOP (100) PERCENT sys.sysobjects.name AS TableName, sys.syscolumns.name AS ColumnName, sys.systypes.name AS DataType,
sys.syscolumns.length
FROM sys.sysobjects INNER JOIN
sys.syscolumns ON sys.sysobjects.id = sys.syscolumns.id INNER JOIN
sys.systypes ON sys.syscolumns.xtype = sys.systypes.xtype WHERE (sys.sysobjects.xtype = 'U') AND (sys.systypes.name <> 'sysname')
ORDER BY TableName, sys.syscolumns.colid
我如何在本地存储,所以我不必继续查询服务器,我可以使用c#动态设置它
我是半新手,因此可以提供的细节很多。
答案 0 :(得分:0)
看到您从数据库中获取列长度,现在需要执行此操作txtBox.MaxLength
如果您已经将aspx页面设计为与数据库表紧密结合,则可以避免动态执行此操作
但如果你确定要这样做,那么:
1.)在应用程序启动时从数据库中获取所有值并从中生成字典缓存,只要应用程序启动它就会存在内存中。
2.)现在,在每个页面加载时,您需要从字典中读取这些值并使用TextBox.MaxLength
属性来设置值。这样您就可以在将max length属性传递到客户端计算机之前调整它
多数民众赞成!
无论如何,任何此类方法都会降低应用程序性能。考虑预先设计aspx页面。
答案 1 :(得分:0)
有两种主要方法,静态变量(实质上是全局变量)或使用应用程序缓存。我个人更喜欢静态变量,因为我发现System.Web.Caching
的API过于复杂。
这是你如何使用静态变量进行讨论的最佳方法(包括如何在.Net 4.0 +中使用新的Lazy
类):
Why use System.Runtime.Caching or System.Web.Caching Vs static variables?
这是使用System.Web.Caching的方法:
http://msdn.microsoft.com/en-us/library/system.web.caching.cache.aspx
我不会过分担心哪个更有效率,这样做的方法几乎完全相同。
答案 2 :(得分:0)
感谢您的建议。出于我的目的,我只是保持简单,因为这是一个相对较小的应用程序。 由于我使用模板,因此我在许多地方多次定义相同的字段。由于我的应用程序数据字段将不经常更改,这只是在应用程序中给我一个位置来更改maxLength属性。
在我的aspx页面中: 'MaxLength =“&lt;%#TableSchema.SomeField1Length%&gt;” /&GT;
我上了课
公共静态类TableSchema {
public static int SomeField1Length
{
get { return 15; }
}
public static int SomeField2Length
{
get { return 100; }
}
public static int SomeField3Length
{
get { return 15; }
}
}
似乎工作正常。我必须看看这是否会导致性能下降。