0

だから、私はASPドロップダウンリストを持っています(これは.net2.0です)。私はそれをデータと結びつけています。基本的に、ページが読み込まれ、ポストバックではない場合、レコードデータをフェッチし、すべてのドロップダウンをバインドして、適切な値に設定します(厳密に言えば、DBからの基本的なデータセットでページを初期化し、ドロップダウンをバインドします) DBから、DBから実際のレコードデータをフェッチし、この時点でドローンダウンを適切な設定に設定します)。私がやりたいのは、リストオプションを選択的にスタイル設定することです。したがって、データベースは3つの項目を返します。ID、テキスト、およびレコードが「アクティブ」であるかどうかを示すフラグです(適切なスタイルを設定します)。それはとても簡単で、私はそれをやりました。

私の問題は、フォームの送信が停止されたときに何が起こるかです。Pageクラスを少し拡張し、AddError()メソッドを作成しました。このメソッドは、失敗したビジネスルールチェックからのエラーのリストを作成し、それらをValidationSummaryに表示します。送信ボタンのクリックイベントでは、次のように機能します。

CheckBizRules();

if(Page.IsValid)
{
    SaveData();
}

いずれかのビジネスルールチェックが失敗した場合、ページは無効になります。問題は、ページが再レンダリングされると(ビューセートが有効になっているが、データがリバウンドされない)、私の美しい条件付きスタイリングが悲しいことになくなって、足りない靴下の土地に住むようになることです。保存する必要があります。

ここで別のDB呼び出しを回避したいと思っていました(たとえば、リストのスタイルを変更する目的で、ページが有効でない場合にDBからリストデータを再度取得するなど)。しかし、それが私の行動方針であるならば、それは世界の終わりではありません。私は誰かが別の提案をするかもしれないことを望んでいました。

誰かが何か提案があったり、説明が必要な場合は、必要に応じて強制的にそれを取得することを躊躇しないでください。;)

4

2 に答える 2

0

ドロップダウンアイテムにどのようなスタイルを適用するかを完全に理解しているわけではありませんが、このスタイルは、コントロールがポストバック全体で保持しないもののようです。したがって、通常、この種の情報はViewStateに保存する必要があります。2つのオプションが表示されます(DBからの再ロード以外)。

最初の方法:DropDownListから継承する独自のドロップダウンコントロールを作成します。次に、アイテムをスタイリングするときに、スタイリングデータをコントロールのViewStateバッグに保存します。

public void SetItemActive(ListItem item)
       {
         ViewState[item.Value] = "active";           
        }

次に、OnRenderをオーバーライドします

protected override void Render(HtmlTextWriter writer)
{

   ....

   foreach(ListItem item in Items)
   {
    if ( ViewState[item.Value] == "active")
    { 
            ** RenderActiveItem **
    }
    else 
    {
            ** RenderNormalItem **

    }

}

2番目の方法:アクティブIDをページのViewStateに保存してから、DBからではなくViewStateからのデータを使用して、各ポストバックのドロップダウンのスタイルを変更します。

于 2009-02-20T17:40:43.923 に答える
0

ページが有効でない場合、データベースにアクセスしてリスト データを再取得し、コントロールのスタイルを変更する以外に何も思いつきませんでした。

于 2009-01-30T12:32:18.957 に答える