2009-05-14 7 views
1

Ich habe zwei Asp.net ListView-Steuerelemente an zwei verschiedene ObjectDataScource-Steuerelemente gebunden. Jedes ODS-Steuerelement verweist auf "MethodA" und "MethodB".Wie Sie den Rückgabewert einer ObjectDataSource basierend auf einer anderen ObjectDataSource festlegen

Ich möchte 'MethodeA', um einen Aufruf der Datenbank und Rückgabe von Daten für beide 'MethodA' und 'MethodB'.

Ich könnte immer 'MethodeB' einen zweiten Aufruf an die Datenbank machen lassen, aber das wäre nicht effizient.

Ich bin nicht sicher, der beste Weg, dies zu erreichen.

[DataObjectMethod(DataObjectMethodType.Select)] 
    public List<int> MethodA(int input) 
    { 
     List<int> a = new List<int>(); 
     List<string> b = new List<string>(); 
     /// 
     /// Make one call to database 
     /// returns: List<int> and List<string> 
     /// set 'a' and 'b' values. 

     return a; 
    } 
    [DataObjectMethod(DataObjectMethodType.Select)] 
    public List<string> MethodB() 
    { 
     List<string> b = new List<string>(); 
     /// 
     /// When MethodA is called set 'b' 
     /// 
     return b; 
    } 

Antwort

0

Ich glaube nicht, dass dies leicht möglich ist.

Sie können ObjectDatasource löschen und selbst rollen oder herumhacken.

Vielleicht eine statische Variable [ThreadLocal] in dieser Klasse verwenden und MethodA den Wert in diese Variable setzen? MethodeB könnte es lesen.

Und ein

[ThreadLocal] 
    private DataSet m_cachedAtoB=null; 

    public static void Reset() 
    { 
    m_cachedAtoB=null; 
    } 

Anruf Reset() von Anfang an Ihrer Seite, so dass jeder Thread, die von ASP.NET recycelt wird, wird nicht alt veraltete Daten für die nächste Anforderung verlassen. Habe ich erwähnt, dass dies ein Hack ist?

Bessere Lösung: Es scheint, dass MethodeB keinen Parameter akzeptiert. Also, was auch immer diese MethodeB abfragt, lassen Sie sie von MethodA holen und in einen HttpCache schieben.

Was ich getan habe, war, dass mein Backend einen ziemlich großen (10 Tabellen) kompletten Datensatz zu den Webservern mit allen statischen Daten retured. Dort hatte ich eine Klasse, die auch Dinge wie MehtodA und MehtodB hatte. Aber sie haben immer den Datensatz abgerufen. GetDataSet() hat die Cahce abgefragt und wenn sie fehlte, den Webservice abgefragt und in den Cache gestellt. Jede meiner MethodA-Methoden verwendete LINQ, um Daten aus dem großen Dataset zu erhalten.

Natürlich ist das nur mit statischen Daten ...

+0

die Daten, die ich berechnen bin mit nicht groß ist nur kompliziert funktioniert, möchte ich die Berechnung zweimal für den gleichen Eingangswert zu vermeiden. Ich habe darüber nachgedacht, die Daten für MethodB in die Sitzung zu stellen. – TonyAbell

Verwandte Themen