从ASP.NET中的另一个线程填充下拉列表

时间:2009-02-22 21:24:28

标签: asp.net vb.net multithreading asp.net-ajax drop-down-menu

我在页面上有多个下拉列表。它们都包含国家列表。所以在后台我从数据库获取国家并缓存它们。我想从另一个线程填充那些下拉列表。 我也在使用AJAX控件,所以我希望这一切都在同一时间发生。并且在用户选择一个国家后,我希望该国家/地区的城镇显示给用户,并且我希望在另一个线程中也可以获得城镇,以便用户可以在列表尚未加载时填充其他控件。
我已经读过某个地方,我应该将Page作为该线程的参数,然后找到下拉列表并填充它们。但这不起作用。

这是一个在另一个线程启动时调用的函数:

protected void GetCountries(object o)
{
    if (Session["Countries"] == null)
    {
        Session["Countries"] = CountryRepository.Instance.GetAll();
    }
    if (o is Page)
    {
        Page p = (Page)o;
        DropDownList ddl = (DropDownList)p.FindControl("ddlCountry");
        ddl.DataSource = Session["Countries"] as List<Country>;
        ddl.DataTextField = "Name";
        ddl.DataValueField = "Id";
        ddl.DataBind();
    }
}

有人看到可能的问题吗?或许我的整个概念都错了?有谁知道如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

看看CascadingDropDown Extender from the ASP.NET AJAX Control Toolkit。它使用Web服务来填充下拉列表,因此它可以异步操作(我相信这就是你所追求的)。