Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何基于另一个ObjectDataSource设置一个ObjectDataSource的返回值_C#_Asp.net_Objectdatasource - Fatal编程技术网

C# 如何基于另一个ObjectDataSource设置一个ObjectDataSource的返回值

C# 如何基于另一个ObjectDataSource设置一个ObjectDataSource的返回值,c#,asp.net,objectdatasource,C#,Asp.net,Objectdatasource,我有两个Asp.net ListView控件绑定到两个不同的ObjectDataSource控件。每个ODS控件引用“MethodA”和“MethodB” 我希望“MethodA”对数据库进行一次调用,并返回“MethodA”和“MethodB”的数据 我可以让“MethodB”再次调用数据库,但这样做效率不高 我不确定实现这一目标的最佳方式 [DataObjectMethod(DataObjectMethodType.Select)] public List<int>

我有两个Asp.net ListView控件绑定到两个不同的ObjectDataSource控件。每个ODS控件引用“MethodA”和“MethodB”

我希望“MethodA”对数据库进行一次调用,并返回“MethodA”和“MethodB”的数据

我可以让“MethodB”再次调用数据库,但这样做效率不高

我不确定实现这一目标的最佳方式

    [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;
    }
[DataObjectMethod(DataObjectMethodType.Select)]
公共列表方法A(整数输入)
{
列表a=新列表();
列表b=新列表();
///
///对数据库进行一次调用
///返回:列表和列表
///设置“a”和“b”值。
返回a;
}
[DataObjectMethod(DataObjectMethodType.Select)]
公共列表方法B()
{
列表b=新列表();
///
///当MethodA被称为集合“b”时
///
返回b;
}

我认为这不容易做到

您可以删除ObjectDatasource并自己滚动它,也可以绕过它

也许在该类中使用[ThreadLocal]静态变量,然后让MethodA将值放入该变量中?方法B可以阅读它

  [ThreadLocal]
  private DataSet m_cachedAtoB=null;

  public static void Reset()
  {
     m_cachedAtoB=null;
  }
从页面开始调用Reset(),以便ASP.NET回收的每个线程不会为下一个请求保留旧的过时数据。我有没有提到这是黑客攻击

更好的解决方案: MethodB似乎不接受参数。所以不管MethodB查询的是什么,让MethodA获取它并将其推送到HttpCache中

我所做的是,我的后端使用所有静态数据向Web服务器返回一个相当大(10个表)的完整数据集。在那里,我有一个类,也有像你的MehtodA和MehtodB的东西。但他们总是获取数据集。GetDataSet()查询cahce,如果缺少,则查询Web服务并将其放入cahce。我的每个MethodA方法都只是使用LINQ从大数据集中获取数据


当然,这只适用于静态数据…

我使用的数据不是很大,只是计算起来很复杂,我希望避免为同一输入值计算两次。我正在考虑将MethodB的数据放在会议中。