【发布时间】:2011-08-05 18:16:56
【问题描述】:
正如标题所说,SqlDataSource 可以跨不同的aspx 页面共享吗? 我在多个 aspx 页面上有完全相同的 sqldatasource,是否可以创建一个并为所有页面共享。
谢谢
【问题讨论】:
标签: asp.net sqldatasource
正如标题所说,SqlDataSource 可以跨不同的aspx 页面共享吗? 我在多个 aspx 页面上有完全相同的 sqldatasource,是否可以创建一个并为所有页面共享。
谢谢
【问题讨论】:
标签: asp.net sqldatasource
当然。如果您真的是指共享,因为所有页面都使用相同的 SqlDataSource,请创建一个母版页并将数据源放在母版中。在代码隐藏中,将其公开为 master 的属性。从那里,您可以从任何使用 Master 的页面引用它。
第二个选项 - 创建一个基本的 Page 类:
public class MyPage : Page
{
private SqlDataSource mDataSource;
public override void OnLoad(EventArgs e)
{
base.OnLoad(e);
// some code to init your data source - depending on your
// implementation, this may need to be in OnInit instead
}
public SqlDataSource DataSource
{
get { return mDataSource; }
}
}
在这种情况下,每当您创建一个新页面时,请转到后面的代码并将声明从实现 Page 更改为 MyPage。所有实现 MyPage 的页面都会有一个 SqlDataSource 成员,尽管每个页面都有自己的实例,所以这并不是真正“共享”同一个 SqlDataSource。
我认为任何一个选项都能让你到达你想去的地方。
更新:海报要求提供一个将 in 作为主属性公开的示例:
给定一个包含以下内容的母版页:
<asp:SqlDataSource runat="server" ID="mDataSource" ... the rest of your properties .... />
<asp:ContentPlaceHolder runat="server" ID="MainContent"/>
在master的代码隐藏中,定义属性:
public class SiteMaster : System.Web.UI.MasterPage
{
public SqlDataSource MasterDataSource
{
get { return mDataSource; }
}
// the rest of your master page's codebehind
}
在您为使用母版页定义的页面中,在@Page 声明下方添加以下内容:
<%@ MasterPage VirtualPath="~/site.master"%>
现在,在该页面的代码隐藏中,您可以参考:
protected void Page_Load(object sender, EventArgs e)
{
SqlDataSource ds = this.Master.MasterDataSource;
}
只要你有一个 在你的 aspx 页面中,你就可以引用你在 master 中公开的任何属性。
编码愉快。
B
【讨论】:
控件特定于页面。要跨页面共享它,请将其放在 UserControl 中,然后通过 UserControl 的公共属性公开它。
【讨论】:
如果你指的是连接字符串,答案是肯定的。你可以把它放在一个公开的共享类中。
如果您的意思是连接在多个页面期间处于打开状态。没有。
您应该始终尽快关闭连接以避免内存泄漏。
【讨论】: