Asp.net 在页面加载时绑定数据而不调用数据库

Asp.net 在页面加载时绑定数据而不调用数据库,asp.net,databound-controls,Asp.net,Databound Controls,我正试图找到一种获取数据绑定控件值的最佳实践。我的应用程序现在的工作方式,通常是在页面加载时,我调用getSettings或其他东西,为每个DropDownLists或repeater进行数据库调用 在这种特殊情况下,我会根据单击的按钮将数据绑定到DropDownList。当应用程序进入数据库并获取所需信息时,数据显示之前会有一段延迟 我想知道是否有更好的方法来处理获取值,也许不必在每次加载页面时进行数据库调用。为了以防万一,我已经包含了一些示例代码 .aspx: <asp:DropDow

我正试图找到一种获取数据绑定控件值的最佳实践。我的应用程序现在的工作方式,通常是在页面加载时,我调用getSettings或其他东西,为每个DropDownLists或repeater进行数据库调用

在这种特殊情况下,我会根据单击的按钮将数据绑定到DropDownList。当应用程序进入数据库并获取所需信息时,数据显示之前会有一段延迟

我想知道是否有更好的方法来处理获取值,也许不必在每次加载页面时进行数据库调用。为了以防万一,我已经包含了一些示例代码

.aspx:

<asp:DropDownList ID="ddl" runat="server"></asp:DropDownList>
<asp:Button ID="btn1" runat="server" OnCommand="btn_Command" CommandName="change" CommandArgument="table1" />
<asp:Button ID="btn2" runat="server" OnCommand="btn_Command" CommandName="change" CommandArgument="table2" />
<asp:Button ID="btn3" runat="server" OnCommand="btn_Command" CommandName="change" CommandArgument="table3" />
<asp:Button ID="btn4" runat="server" OnCommand="btn_Command" CommandName="change" CommandArgument="table4" />
有没有办法缓存结果?我知道这是一个粗糙的,因为它只有一个下拉列表,但即使每个按钮都有一个下拉列表,有没有什么方法可以不用调用4个数据库就可以获得数据


提前感谢。

您可以简单地将这些值存储在应用程序变量中,并在应用程序启动时仅检索一次。请参阅中的一些简单示例

Global.asax

代码隐藏


您可以更改查询以返回多个结果集,并将结果填充到数据集中。加载数据集后,可以将数据集中的每个数据表绑定到相应的下拉列表


如果需要,还可以缓存结果或将其置于应用程序状态。不过,我仍会考虑合并查询

找到了一种使用jQuery ajax实现这一点的方法。我在客户端单击一个按钮,它会弹出我需要的值,这些值是用WebMethod中的某个html服务器端格式化的。多做一点工作,但删除所有回发并加载我不需要或不使用的回发


谢谢大家

我想做一些你做过的事情,请复习一下并帮助我。
DBClass dbc = new DBClass();

protected void btn_Command (object sender, CommandEventArgs e){
    if (e.CommandName == "change"){
        ddl.DataSource = dbc.ExecuteQuery("SELECT * FROM " + e.CommandArgument);
        ddl.DataTextField = "Text";
        ddl.DataValueField = "Value";
        ddl.DataBind();
    }
}
protected void Application_Start(object sender, EventArgs e)
{
    DBClass dbc = new DBClass();
    Application["table1"] = dbc.ExecuteQuery<TResult>("SELECT * FROM table1");
    Application["table2"] = dbc.ExecuteQuery<TResult>("SELECT * FROM table2");
    // ...
}
protected void btn_Command (object sender, CommandEventArgs e)
{
    if (e.CommandName == "change")
    {
        ddl.DataSource = Application[e.CommandArgument] as IEnumerable<TResult>;
        ddl.DataTextField = "Text";
        ddl.DataValueField = "Value";
        ddl.DataBind();
    }
}