2009-05-14 7 views
1

J'ai deux contrôles ListView Asp.net liés à deux contrôles ObjectDataScource différents. Chaque contrôle ODS fait référence à 'MethodA' et à 'MethodB'.Comment définir la valeur de retour d'un ObjectDataSource basé sur un autre ObjectDataSource

Je souhaite que 'MethodA' appelle la base de données et renvoie les données pour 'MethodA' et 'MethodB'.

Je pourrais toujours demander à 'MethodB' de faire un deuxième appel à la base de données, mais cela ne serait pas efficace.

Je ne suis pas sûr de la meilleure façon d'y parvenir.

[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; 
    } 

Répondre

0

Je ne pense pas que ce soit facilement possible.

Vous pouvez supprimer ObjectDatasource et le lancer seul ou le contourner.

Peut-être utiliser une variable statique [ThreadLocal] dans cette classe et laisser MethodA mettre la valeur dans cette variable? MethodB pourrait le lire.

Et

[ThreadLocal] 
    private DataSet m_cachedAtoB=null; 

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

appel Reset() dès le début de votre page afin que chaque fil qui est recyclé par ASP.NET ne laissera pas les anciennes données périmées pour la prochaine demande. Ai-je mentionné que c'est un hack? Meilleure solution: Il semble que MethodB ne prenne pas de paramètre. Donc quoi que ce soit que les requêtes MethodB, laissez MethodA aller le chercher et le pousser dans un HttpCache.

Ce que j'ai fait, c'est que mon backend renvoyait un ensemble de données complet assez grand (10 tables) aux serveurs web avec toutes les données statiques. Là, j'ai eu une classe qui avait aussi des choses comme votre MehtodA et MehtodB. Mais ils ont toujours récupéré l'ensemble de données. GetDataSet() a interrogé le cahce et s'il manquait, a interrogé le webservice et l'a mis dans le cahce. Chacune de mes méthodes MethodA a simplement utilisé LINQ pour obtenir des éléments du grand ensemble de données.

Bien sûr, cela ne fonctionne qu'avec des données statiques ...

+0

les données que je me sers est pas grand simplement compliqué à calculer, je veux éviter de calculer deux fois pour la même valeur d'entrée. Je pensais à mettre les données pour MethodB dans la session. – TonyAbell

Questions connexes