2009-04-21 6 views
0

Es ist .net 2.0 hier, nicht MVC, und ich bin Mist bei ASP-Formulare.Übergeben Sie Daten an Benutzerkomponenten in asp.net

Ich habe eine Seite mit Benutzersteuerelementen darauf. Wenn ich auf etwas auf der Seite klicke, möchte ich das Benutzersteuerelement basierend auf einem Parameter von der Seite laden.

Ich kann es nicht tun.

In meiner Seite FaultTree_Clicked, bekomme ich den Wert, dann gilt:

  • Ich habe versucht, eine Eigenschaft auf dem Kind Benutzerkontrolle aussetzt den Wert einzustellen, die ich in FaultTree_Clicked gesetzt, es vergessen wird.

  • Ich habe versucht, es zu Session [ "MyKey"] und Laden Session [ "MyKey"] in der Page_Init Kontrolle Speichern ... ist der Wert leer.

  • ich versuchte, es zu Viewstate [ "MyKey"] und Laden Viewstate [ "MyKey"] in der Page_Init Kontrolle Speichern ... ist der Wert leer.

EDIT: spezifischere Informationen:

Hier ist eine abgespeckte Version von dem, was die Seite (MyFault) wie folgt aussieht:

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

Und es gibt eine Methode auf dem Codepages hinter "FaultTree_SelectedNodeChanged()".

Wenn diese Methode getroffen wird, möchte ich das DefectDetail-Steuerelement laden/anzeigen. Das DefectControl benötigt eine Fehler-ID, die von der Struktur kommt, die ich in der SelectedNodeChanged-Methode erfolgreich erhalten habe. Ich kann den Fehler nicht in die Fehlerkontrolle bringen.

Antwort

2

Dies hat mit ASP.NET-Seitenlebenszyklus zu tun. Zu dem Zeitpunkt, zu dem das Click-Ereignis ausgelöst wird, ist das Init-Ereignis des Steuerelements bereits eingetreten.

Um Sie besser zu unterstützen, erläutern Sie bitte genauer, was das FaultTree-Steuerelement ist, was das gewünschte Ergebnis und ein Beispielcode ist.

UPDATE:

Statt einer öffentlichen Eigenschaft, können Sie einfach eine öffentliche Methode in der Steuerung erstellen, die die gewünschte Aktion tut und rufen Sie es aus dem FaultTree_SelectedNodeChangeEvent.

Beispiel (für eine öffentliche Methode namens Aktualisieren):

_DefectDetail.Refresh(object data); 
+0

Ich aktualisierte mit einem Beispiel zu erklären, was ich versuche zu tun. – dalyons

+0

argh! das war alles was ich tun musste !! Haha. Tausend Dank. Wenn ich die Fehlereigenschaft innerhalb der Refresh-Funktion festlege, merkte ich, dass sie leer ist, wenn ich eine andere Methode für dieses Steuerelement anrufe. Also lege ich die Faulid in ein verstecktes Feld, das von Refresh aktualisiert wird. ist das der Weg zu gehen? Ich denke, es könnte sein, weil mein Fehler Objekt nicht serialisierbar ist. – dalyons

+0

Wenn das versteckte Feld funktioniert, ist das großartig. –

0

Grundsätzlich müssen Sie Eventhandler verwenden ....

 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 

Dieser Code sollte Ihnen ein paar Ideen ... war getan für 1.1 sollte am 2. arbeiten.