0

asp.net 4.0 c# Web アプリケーションがあります。フォームのテンプレートで listview コントロールと formview コントロールを使用しています。フィールド サイズを aspx ページにハード コーディングせずに、バインドされたテキスト ボックスの maxlength プロパティを制御しようとしています。アプリケーションを最初にロードするときに、ある種のローカル オブジェクトまたは配列にフィールドの列の長さを入力し、それらの値を使用してテキスト ボックスの 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

これには主に 2 つの方法があります。静的変数 (基本的にはグローバル変数) を使用する方法と、アプリケーション キャッシュを使用する方法です。個人的には、API がSystem.Web.Caching複雑すぎるため、静的変数を好みます。

これは、静的変数を使用する方法であり、どの方法が最適かについて少し説明します ( Lazy.Net 4.0+ で新しいクラスを使用する方法を含む)。

System.Runtime.Caching または System.Web.Caching と静的変数を使用する理由

System.Web.Caching の使用方法は次のとおりです。

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

どちらがより効率的かについてはあまり心配しません。これを行う方法は、パフォーマンスに関してはほぼ同じです。

于 2013-01-21T16:49:18.190 に答える
0

ご提案いただきありがとうございます。これは比較的小さなアプリなので、私の目的のためにシンプルにしました。テンプレートを使用しているため、多くの場所で同じフィールドを複数回定義しています。私のアプリケーション データ フィールドは頻繁に変更されるため、アプリケーション内で maxLength プロパティを変更する場所が 1 か所だけ与えられます。

私のaspxページ: ' MaxLength="<%# TableSchema.SomeField1Length%>" />

クラスを作りました

public static class 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.) アプリケーションの起動時に DB からすべての値をフェッチし、そこからディクショナリ キャッシュを作成します
。アプリケーションが起動している限り、メモリ内に保持されます。
2.) ここで、ページを読み込むたびに、辞書からこれらの値を読み取り、TextBox.MaxLengthプロパティを使用して値を設定する必要があります。このようにして、クライアント マシンに配信される前に最大長プロパティを調整します。
それでおしまい !!!

とにかく、この種のアプローチはアプリケーションのパフォーマンスを低下させます。aspx ページの事前設計を検討してください。

于 2013-01-21T11:09:56.140 に答える