ASP.NET控件可见性困境

时间:2012-02-28 10:04:29

标签: c# asp.net session visibility objectdatasource

我有PageGridView使用ObjectDataSource SelectMethodDropDownList。除其他外,SelectMethod获取包含多个ID的字符串数组(用于过滤数据) - 但我还需要DataSource作为DropDownList。 唉,我不能DataBind DropDownList SelectMethod,因为它是空的。 一个想法是将此string[]绑定到Session - 变量,但之后我必须在每Page_Load次重新设置它或从Session中删除它如果我想要更新数据库上的某些内容,请在每个其他页面上进行更新。

我正在寻找的是Page_LoadObjectDataSource s SelectMethod中可用的某种变量,但是在离开页面时会自行删除(即导航到我的Web应用程序上的任何其他页面(最好不必在每个其他页面上调用方法)。

我希望你能理解我的问题。

谢谢,

丹尼斯

2 个答案:

答案 0 :(得分:1)

据我所知,获取字符串数组的需要源于单独的往返将导致的性能损失。要解决此问题,您可以创建一个单独的对象来提供对象数据源。这个对象有两个方法,一个用于获取字符串数组,另一个用于获取网格数据(即select方法)

然后,您可以在页面中放置这样的对象,并以惰性方式获取其中的数据。如果对象调用任何数据,则将其他部分存储在字段中。然后,您可以使用ObjectDataSource ObjectCreating事件将页面上的此对象传递给ObjectDataSource

protected void odsSomething_ObjectCreating(object sender, ObjectDataSourceEventArgs e)
{
    e.ObjectInstance = YourInsntanceAlreadyInThePage;
}

这样你就可以避免往返。

还要考虑使用异步客户端调用同时进行两次Web服务调用,以便您可以同时进行两次调用。如果这是可行的,取决于你的逻辑流程。

答案 1 :(得分:1)

  

我正在寻找的是某种变量,它可以在Page _ Load和我的ObjectDataSource的{​​{1}}中使用,但在离开页面时自行删除(即导航到我的Web应用程序上的任何其他页面(最好不必在每个其他页面上调用方法)。

在类似的情况下,我使用了当前SelectMethod的{​​{1}}属性。它是一个Items(非泛型),因此可以保存由任意HttpContext s锁定的任意IDictionary,其生命周期恰好是当前请求的持续时间,因此将会消失请求结束后立即生效。使用:

object