2009-04-21 10 views
0

ここは、MVCではなく、.net 2.0です。私はaspフォームで駄目です。asp.netのユーザーコンポーネントにデータを渡します。

私は、ユーザーコントロール付きのページを持っています。ページ内の何かをクリックすると、ページのパラメータに基づいてusercontrolをロードします。

私はそれを行うことはできません。私のページのFaultTree_Clickedで

、私はその後、値を取得:

  • は、私は私がFaultTree_Clicked、それは忘れられます に設定された値を、設定し 子ユーザーコントロールのプロパティを露出させてみました。

  • 私は セッション[ "mykeyを"]、およびコントロールの Page_initでロード セッション[ "にmykey"]にそれを保存しようとした...値が空白になっています。

  • 私は値が空白になって...コントロールの Page_initに のViewState [ "にmykey"]に保存し、ロード のViewState [ "にmykey"]みました。

EDIT:より具体的な情報:

<form id="form" runat="server"> 
<div id="faulttree"> 
    <asp:TreeView ID="FaultTree" ......> 
</div> 
<uc1:_DefectDetail ID="DefectDetail" runat="server" Visible="true" EnableViewState="true" /> 
</form> 

そして背後にあるページのコード上の方法がある:ここでは

ページ(MyFault)がどのように見えるの削減バージョンです"FaultTree_SelectedNodeChanged()"

このメソッドがヒットしたら、DefectDetailコントロールをロード/表示します。 DefectControlには、ツリーから外れたfaultidが必要です。これは、SelectedNodeChangedメソッドで正常に取得できます。欠陥コントロールにfaultidを取得することはできません。

答えて

2

これは、ASP.NETのページライフサイクルと関係があります。クリックイベントが発生するまでに、コントロールのinitイベントは既に発生しています。

FaultTreeコントロールが何であるか、望ましい結果とサンプルコードの詳細について、より詳しく説明してください。

UPDATE:

代わりに公共財産の、あなたは、単に目的の操作を行いコントロールでパブリックメソッドを作成し、FaultTree_SelectedNodeChangeEventからそれを呼び出すことができます。

(最新の情報に更新という名前のパブリックメソッドの)例:

_DefectDetail.Refresh(object data); 
+0

私は何をしようとしているか説明するための例を更新しました。 – dalyons

+0

それは私がする必要があったすべてです!ハハ。ありがとう。 Refresh関数内でfaultプロパティを設定した場合、そのコントロールの別のメソッドを呼び出すまでに空白に気づきました。だから私は、リフレッシュによって更新される隠されたフィールドにfaultidを置く。これは道のりですか?私は自分のフォールトオブジェクトがシリアル化可能ではないと思うかもしれないと思う。 – dalyons

+0

隠しフィールドがうまく動作すればそれは素晴らしいです。 –

0

基本的にあなたがのEventHandlerを使用する必要があります....

 1. Add a event handler to your user control (I had a search bar UscSearchCriteriaBar1)  

     public event EventHandler CriteriaChanged; 

     + 


     private void InternalOnCriteriaChanged() 
     { 
     OnCriteriaChanged(); 
     } 
     + 
     protected virtual void OnCriteriaChanged() 
     { 
     // If there are registered clients raise event 
     if (CriteriaChanged != null) 
     CriteriaChanged(this, EventArgs.Empty); 
     } 
     + 
     Example 
     public int EmployeeID 
     { 
     get 
     { 
     f (Session["EmployeeID"] != null) 
     { 
     ViewState["EmployeeID"] = Convert.ToInt32(Session["EmployeeID"]); 
     } 
     if (ViewState["EmployeeID"] == null) 
     ViewState["EmployeeID"] = 0; 
     return int.Parse(ViewState["EmployeeID"].ToString()); 
     } 
     set 
     { 
     ctlEmployee.SelectedValue = value.ToString(); 
     ViewState["EmployeeID"] = value; 
     Session["EmployeeID"] = value; 
     } 
     } 


     In your page or other control 


     override protected void OnInit(EventArgs e) 
     { 
     InitializeComponent(); 
     UscSearchCriteriaBar1.CriteriaChanged += new EventHandler(this.CriteriaChanged);  
     base.OnInit(e); 
     } 

     private void CriteriaChanged(object sender, EventArgs e) 
     { 
     try 
     { 
RefreshData(); 
     } 
     catch (Exception ex) 
     { 
     ExceptionManager.Publish(ex); 
     } 
     } 

    You can get UscSearchCriteriaBar1.EmployeeID 

このコードはあなたにいくつかのアイデアを与える必要がありますが...行われていました1.1については2で作業する必要があります。

関連する問題