2009-03-17 5 views
1

私はC#でカスタムWebユーザーコントロールを作成しています。これは、権限階層と対話することを意図しています。私たちにはさまざまな「サイト」があり、各サイトには多くの「アプリ」があり、各アプリには多くの「アクセス許可」がありますTreeViewノードがキャッシュされているようです

したがって、各サイトにタブを読み込むTabPanelがあります。次に各タブで、親ノードがアプリであり、内部ノードがパーミッションであるTreeViewがあります。

[アクセス許可]には、いくつかの条件に基づいてチェックボックスが表示され、HasPermission関数がtrueを返すかどうかによってチェックされます。

このコードはすべて、最初に選択したユーザーのみが動作します。後続のユーザが選択された場合、デバッガのステップは実行されているすべての正しいロジックを表示しますが、ページには最初に選択したユーザと同じ情報が表示されます。

基本的に、どこかでディスプレイを保存しています...私はどこにいるのか分かりません。私は上記のすべてのコードの後に​​、ツリービューを反復処理

public partial class Permissions : System.Web.UI.UserControl 
{ 
    string _NTLogin; 
    CoreUser _User; 
    bool _IsAdmin; 
    public string NTLogin 
    { 
     get 
     { 
      return _NTLogin; 
     } 
     set 
     { 
      ViewState["NTLogin"] = value; 
      _NTLogin = value; 
     } 
    } 
    public bool IsAdmin 
    { 
     get 
     { 
      return _IsAdmin; 
     } 
     set 
     { 
      ViewState["IsAdmin"] = value; 
      _IsAdmin = value; 
     } 
    } 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 
    public void LoadTabs() 
    { 
     string [] sites = MISCore.BusinessLayer.CorePermission.GetSites(); 
     foreach (string site in sites) 
     { 
      TabPanel tp = new TabPanel(); 
      tp.HeaderText = site; 
      TabContainer1.Tabs.Add(tp); 
     } 
    } 
    public void LoadTrees() 
    { 
     if(_User == null) 
      return; 
     TabPanelCollection tabs = TabContainer1.Tabs; 
     foreach (TabPanel tab in tabs) 
     { 
      string site = tab.HeaderText; 
      string[] apps = MISCore.BusinessLayer.CorePermission.GetApplications(site); 
      TreeView tv1 = new TreeView(); 
      tv1.EnableViewState = false; 
      foreach (string app in apps) 
      { 
       TreeNode tn1 = new TreeNode(app); 
       tn1.SelectAction = TreeNodeSelectAction.None; 
       string[] perms = MISCore.BusinessLayer.CorePermission.GetPermissions(site, app); 
       foreach (string perm in perms) 
       { 
        TreeNode tcn1 = new TreeNode(perm); 
        tcn1.SelectAction = TreeNodeSelectAction.None; 
        if (IsAdmin || _User.Manager.HasPermission(site, app, perm)) 
        { 
         tcn1.ShowCheckBox = true; 
         if (_User.HasPermission(site, app, perm)) 
         { 
          tcn1.Checked = true; 
         } 
         else 
         { 
          tcn1.Checked = false; 
         } 
        } 
        else 
        { 
         tcn1.ShowCheckBox = false; 
        } 
        tn1.ChildNodes.Add(tcn1); 
       } 
       tv1.Nodes.Add(tn1); 
      } 
      tab.Controls.Add(tv1); 
     } 

    } 
    protected override void LoadViewState(object savedState) 
    { 
     base.LoadViewState(savedState); 
     _NTLogin = (string)ViewState["NTLogin"]; 
     _IsAdmin = (bool)ViewState["IsAdmin"]; 
     if(_NTLogin != null) 
      _User = new CoreUser(_NTLogin); 
     TabContainer1.Tabs.Clear(); 
     LoadTabs(); 
     LoadTrees(); 
    } 
} 

[UPDATE] は、それが正しく彼らの正しいステータスを格納します。これは表示に関する問題です。他のプロパティ、ツールチップ、テキストなどを正常に変更して状態を表示することはできますが、チェックボックスは更新されません。

答えて

0

私はFiddlerを使用して、誰が結果をキャッシュしているかを確認します。リクエストを見ることで、ブラウザや問題の原因となっているサーバーであるかどうかを知ることができます。

0

クライアントでも問題ない場合は、[更新]という小さなリンクボタンを押して、必要に応じていつでもこの更新ツリービューメソッドを強制することができます。

0

かなりシンプルで、タブのパラメータでEnableViewState = falseを追加するだけです。これがあなたのために働くかどうか私に教えてください。

関連する問題