如果您不想深入研究背后的代码,还有另一种方法可以做到这一点。
首先阅读这篇文章表达构建器 http://weblogs.asp.net/infinitiesloop/archive/2006/08/09/The-CodeExpressionBuilder.aspx。我最喜欢带入我的网络应用程序的东西之一!
现在一些代码:
首先在您的项目中创建一个包含以下内容的类:
using System;
using System.CodeDom;
using System.Web.UI;
using System.Web.Compilation;
namespace MyNamespace.Web.Compilation
{
[ExpressionPrefix("code")]
public class CodeExpressionBuilder : ExpressionBuilder
{
public override CodeExpression GetCodeExpression(BoundPropertyEntry entry,
object parsedData, ExpressionBuilderContext context)
{
return new CodeSnippetExpression(entry.Expression);
}
}
}
然后,在 web.config 中注册表达式生成器,如下所示
...
<compilation debug="false">
<expressionBuilders>
<add expressionPrefix="Code" type="MyNamespace.Web.Compilation.CodeExpressionBuilder"/>
</expressionBuilders>
</compilation>
...
(以上所有代码均取自here http://weblogs.asp.net/infinitiesloop/archive/2006/08/09/The-CodeExpressionBuilder.aspx并稍作修改)
最后将 SqlDataSource 更改为以下内容 (C#):
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString='<%$ code: (string)Session["MyConnectionString"] ?? ConfigurationManageer.ConnectionStrings["myDefaultConn"].ConnectionString %>'
SelectCommand="SELECT * FROM [Customers]">
</asp:SqlDataSource>
如果您想(并且我建议)创建一个静态类来为您计算连接字符串,请说以下内容:
public static ConnectionManager
{
public static string GetConnectionString()
{
return HttpContext.Current.Session["MyConnectionString"] as string ??
ConfigurationManager.ConnectionStrings["DefaultConnectionStr"].ConnectionString;
}
}
那么你的 SqlDataSource 就是
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString='<%$ code: ConnectionManager.GetConnectionString() %>'
SelectCommand="SELECT * FROM [Customers]">
</asp:SqlDataSource>
这样,如果您需要更改获取连接字符串的方式,您可以在一个地方完成!