母版页配置SqlDataSource后内容页能否使用独立select语句?
实现方案
完全可以在母版页中配置通用SqlDataSource后在子页面使用自定义SelectCommand执行查询,这是站点级复用数据库连接配置的常用方案。
具体实现步骤
1. 母版页配置通用SqlDataSource
在母版页中仅定义所有页面通用的配置项,不要写死查询语句,示例代码如下:
<asp:SqlDataSource ID="CommonSqlDataSource" runat="server" ConnectionString="<%$ ConnectionStrings:你的全局连接字符串配置名 %>" CancelSelectOnNullParameter="false" SelectCommandType="Text"> </asp:SqlDataSource>
你可以根据需求统一配置全局超时时间、通用参数、增删改的权限规则等所有页面公用的属性。
2. 子页面调用并自定义查询逻辑
子页面可以通过两种方式调用母版页的通用数据源:
方式1:后台代码调用(灵活度最高)
// 获取母版页的数据源实例 var commonDs = (SqlDataSource)Master.FindControl("CommonSqlDataSource"); // 清空之前的参数避免冲突 commonDs.SelectParameters.Clear(); // 赋值当前页面专属的SELECT语句 commonDs.SelectCommand = "SELECT 字段1,字段2 FROM 表名 WHERE 筛选条件 = @Param"; // 添加当前页面独有的查询参数 commonDs.SelectParameters.Add("Param", TypeCode.Int32, "参数值"); // 执行查询并绑定到页面控件 GridView1.DataSource = commonDs.Select(DataSourceSelectArguments.Empty); GridView1.DataBind();
方式2:前台直接绑定(需提前封装公共属性)
首先在母版页后台封装数据源的公共访问属性:
public SqlDataSource SiteCommonDataSource { get { return CommonSqlDataSource; } }
之后子页面前台可以直接绑定:
<asp:GridView ID="GridView1" runat="server" DataSourceID="<%$ Master.SiteCommonDataSource %>"> </asp:GridView>
注意事项
- 单次请求生命周期内,母版页和子页面对应的数据源实例是唯一的,不会出现跨页面的状态污染
- 如果单页面需要执行多次不同查询,每次修改
SelectCommand前都要清空SelectParameters集合,避免参数冲突 - 涉及写入操作的通用逻辑也可以按同样思路在母版页统一配置
内容的提问来源于stack exchange,提问作者Darren C
相关产品推荐
相关产品推荐

