C# 防止在每次回发时选择LinqDataSource

C# 防止在每次回发时选择LinqDataSource,c#,asp.net,linqdatasource,C#,Asp.net,Linqdatasource,页面中有一个GridView和一个LinqDataSource,还有几个按钮的操作与GridView及其LinqDataSource无关。为什么在这些按钮的每个背面都会调用LinqDataSource的选择方法?这正常吗?! 不需要从LinqDataSource进行这些不需要的db调用 有更好的方法吗?因为网格需要在每次页面加载时填充,您可以将数据缓存到某个变量,并将其存储在服务器端(不在viewstate中)您需要将GridView与数据源分离。我假设您已经像这样附加了数据源,在这种情况下,不

页面中有一个GridView和一个LinqDataSource,还有几个按钮的操作与GridView及其LinqDataSource无关。为什么在这些按钮的每个背面都会调用LinqDataSource的选择方法?这正常吗?! 不需要从LinqDataSource进行这些不需要的db调用


有更好的方法吗?

因为网格需要在每次页面加载时填充,您可以将数据缓存到某个变量,并将其存储在服务器端(不在viewstate中)

您需要将GridView与数据源分离。我假设您已经像这样附加了数据源,在这种情况下,不要这样做

<asp:LinqDataSource 
    runat="server"
    ContextTypeName="AdventureWorksDataContext" 
    TableName="Contacts" 
    ID="LinqDataSource1">
</asp:LinqDataSource>

<asp:GridView 
    ID="GridView1" 
    runat="server"
    DataSourceID="LinqDataSource1" >
</asp:GridView>

是的,我在想那一点,你把我的头朝上,正确地指了指我。不幸的是,显然我的选择与LinqDataSource关联,当我使用RadGrid用这种方法连接它并导出数据时,它被称为2x。。。疯狂的世界。数据源控件是否应该足够明智,以确保回发之间没有参数更改,从而不再调用数据库?我以为这就是它的工作原理?你忘了网络是无状态的。将页面发送到客户端后,服务器上的数据就消失了。回发是一个新的请求,您需要再次向数据库请求回发,以便向客户端提供响应。会话对象可以很好地完成回发。谢谢
if (dataSourceNeeded == true) {
  GridView1.DataSource = GetDataSource();
  GridView1.DataBind();
}