You need to enable JavaScript to run this app. ASPX页面如何通过AppSettings配置项引用web.config中的连接字符串
优惠活动
大模型
产品
解决方案
定价
更多

ASPX页面如何通过AppSettings配置项引用web.config中的连接字符串

解决方案

你尝试的嵌套表达式写法无法生效,因为ASP.NET内置的<%$ %>表达式生成器不支持嵌套解析,以下是3种可行的实现方案:

方案1:数据绑定表达式实现(改动最小,适合少量页面场景)

ASP.NET服务器控件属性不支持直接用<%= %>内联代码赋值,改用数据绑定表达式即可,步骤如下:

  1. 修改SqlDataSource的ConnectionString属性,注意外层用单引号避免引号冲突:
<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString='<%# ConfigurationManager.ConnectionStrings[ConfigurationManager.AppSettings["CSName"]].ConnectionString %>'
    ... 其他原有属性 ...
>
  1. 在对应页面的Page_Load事件中添加数据绑定触发代码:
protected void Page_Load(object sender, EventArgs e)
{
    Page.DataBind(); // 触发当前页面所有控件的数据绑定逻辑
}
  1. 若提示找不到ConfigurationManager类,按需添加命名空间引用:
  • 单页面引用:在aspx页面顶部添加
    <%@ Import Namespace="System.Configuration" %>
  • 全局引用:在web.config的<system.web><pages><namespaces>节点下添加配置,所有页面生效:
<add namespace="System.Configuration" />

方案2:后台统一赋值(适合批量修改所有页面的场景)

如果需要修改的页面数量多,不需要逐个改动aspx代码,直接在公共页面基类或者每个页面的Page_Load事件中遍历所有SqlDataSource控件统一赋值即可:

using System.Configuration;
using System.Web.UI.WebControls;

protected void Page_Load(object sender, EventArgs e)
{
    string csName = ConfigurationManager.AppSettings["CSName"];
    string connStr = ConfigurationManager.ConnectionStrings[csName].ConnectionString;
    
    // 遍历页面控件(如果有嵌套控件,可补充递归遍历逻辑)
    foreach (Control c in Page.Controls)
    {
        if (c is SqlDataSource sqlDs)
        {
            sqlDs.ConnectionString = connStr;
        }
    }
}

方案3:自定义表达式生成器(适合需要保留表达式写法的场景)

如果希望保持和原有<%$ %>类似的写法风格,可以自定义表达式生成器,实现<%$ AppConnString:CSName %>这类自定义语法,该方案复杂度相对较高,适合大量页面需要统一编码规范的场景使用。


内容的提问来源于stack exchange,提问作者Jon.A

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 00:54:01