0

我有一个 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# 动态设置它

我是一个半新手,所以能提供尽可能多的细节将不胜感激。

4

3 回答 3

0

有两种主要方法可以做到这一点,静态变量(本质上是全局变量)或使用应用程序缓存。我个人更喜欢静态变量,因为我发现 APISystem.Web.Caching过于复杂。

这是您使用静态变量的方式,并讨论了哪种方法最好(包括如何Lazy在 .Net 4.0+ 中使用新类):

为什么使用 System.Runtime.Caching 或 System.Web.Caching Vs 静态变量?

这是如何使用 System.Web.Caching:

http://msdn.microsoft.com/en-us/library/system.web.caching.cache.aspx

我不会太担心哪个更有效,这样做的方法在性能方面几乎相同。

于 2013-01-21T16:49:18.190 回答
0

感谢您的建议。出于我的目的,我只是保持简单,因为这是一个相对较小的应用程序。由于我使用的是模板,因此我在许多地方多次定义了相同的字段。由于我的应用程序数据字段会经常更改,这只是在应用程序中为我提供了一个更改 maxLength 属性的位置。

在我的 aspx 页面中:' MaxLength="<%# TableSchema.SomeField1Length%>" />

我做了一堂课

公共静态类 TableSchema {

    public static  int SomeField1Length
    {
    get { return 15; }

    }

    public static int SomeField2Length
    {
    get { return 100; }

    }

    public static int SomeField3Length
    {
        get { return 15; }

    }

}

它似乎工作正常。我必须看看这是否会导致性能下降。

于 2013-01-24T09:58:04.863 回答
0

看到您正在从数据库中获取列长度,现在您需要这样做txtBox.MaxLength
如果您已经设计了与数据库表紧密耦合的 aspx 页面,则可以避免动态执行此操作。
但是,如果您确定要这样做,那么:
1.) 在应用程序启动时,从数据库中获取所有值并从中制作字典缓存,只要应用程序启动,它将位于内存中。
2.)现在,在每个页面加载时,您需要从字典中读取这些值并使用TextBox.MaxLength属性来设置值。这样,您可以在将最大长度属性传递到客户端计算机之前对其进行调整。
而已 !!!

无论如何,任何这种方法都会降低应用程序的性能。考虑预先设计 aspx 页面。

于 2013-01-21T11:09:56.140 回答