2017-04-24 58 views
0

編集(もっと簡単に):私は、左側のツリービューと私は私のコントロールを追加するには、右側のパネルのリストと制御「の設定を」持っている切り替え

。これらの要素はテーブルの内側に配置され、ajaxパネルで囲まれます。

私は2つの要素car1とcar2を持つツリーノードの車を持っているとしましょう。私はアイテムをクリックすると、私はPage_Init上で右ユーザーコントロールを読み込むことができるように隠されたフィールド内の選択したツリーノードのIDとタイプを保存し、この車のためのデータがデータベースから収集されLoadEntityItemで

protected void Page_Init(object sender, EventArgs e) 
    { 
     var type = this.Request.Form["ctl00$MainContent$ctl00$typeId"]; 
     var id = this.Request.Form["ctl00$MainContent$ctl00$entityId"]; 
     if (!string.IsNullOrEmpty(type) && !string.IsNullOrEmpty(id)) 
     { 
      this.LoadUserControl(type, id); 
     } 
    } 

private void LoadUserControl(string type, string id) 
    { 
     if (Convert.ToInt32(type) != 0) 
     { 
      switch (Convert.ToInt32(type)) 
      { 
       case (int)SkTopics.Product: 
        this.AddUserControl("../Modules/Product.ascx", this.Product, type, id); 
        break; 
      } 
     } 
    } 

private void AddUserControl(string controlName, Panel panel, string type, string id) 
    {  
     // Init new user cotntrol 
     control = (BaseControl)this.LoadControl(controlName); 
     control.LoadEntityItem(Convert.ToInt32(id)); 

     // Setting the user control ID 
     var replace = controlName.Replace("../Modules/", string.Empty); 
     string userControlId = replace.Split('.')[0] + id; 
     var targetControl = panel.FindControl(userControlId); 

     if (object.Equals(targetControl, null)) 
     { 
      control.ID = userControlId; 
      control.DataBind(); 
      panel.Controls.Add(control); 
     } 
    } 

と値はテキストボックスのテキストとして設定されます。 2番目の車に切り替えると、新しい値が表示されます。

問題:テキストボックス内の値を変更し、保存ボタンを押して、ユーザーコントロールの保存メソッドを呼び出します。これ以降、car 1のデータがいっぱいになっても、car 1の値が再び表示されます。私はcar1のデータを見て、私は完全に異なるタイプのコントロールに切り替えてからcar1に戻っていかなければなりません。

もう1つの問題は、私はユーザーコントロールの内部にバイナリイメージを持っていて、データがinitに書き込まれることです。私は画像が設定されていない次の車に向かって、画像データをnullに設定しますが、前の車からの画像が表示されます。オニル私は別の画像データを設定すると、新しい画像が表示されます。

私は気づいたことがあります: ユーザーコントロールの中で私はjavascriptの機能を呼び出しますが、これは保存ボタンをクリックしたときにのみ呼び出されます。ツリーノードの切り替えと保存ボタンのクリックには違いがあるようですね。

ScriptManager.RegisterStartupScript(this, this.GetType(), "InitScrewPointsForDragging", "InitScrewPointsForDragging();", true); 

これは以前よりも簡単だったと思います。

+0

答えをより簡単に説明できますか –

+0

私の質問が更新されました。そうでない場合は、私に知らせて、もう一度試してみましょう – Caipigott

答えて

0

問題の理由は、不適切なviewstateの処理であり、ビューの状態を無効にした後、私の側で正しく機能しているようです。ここに私の側で動作するように更新されたコードがあります: this.control.EnableViewState = false; this.control.ID = userControlId;