SqlDataSource是否可以跨不同的aspx页面共享?

时间:2011-08-05 18:16:57

标签: asp.net sqldatasource

正如标题所说的那样,SqlDataSource可以跨不同的aspx页面共享吗? 我在多个aspx页面上有完全相同的sqldatasource,是否可以创建一个并共享所有页面。

感谢

3 个答案:

答案 0 :(得分:1)

不确定。如果您的意思是共享,就像在所有页面中使用相同的SqlDataSource一样,创建母版页并将数据源放在母版中。在代码隐藏中,将其公开为主服务器的属性。从那里,您可以从任何使用Master的页面中引用它。

第二个选项 - 创建一个基页类:

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。

我认为,任何一个选项都可以让你到达目的地。

更新:海报要求作为主人的财产公开的例子:

给出具有以下内容的母版页:

<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;
}

只要您拥有&lt;%@ MasterType VirtualPath =“〜/ PATH TO YOUR MASTER”%&gt;在您的aspx页面中,您可以引用在master中公开的任何属性。

快乐的编码。

答案 1 :(得分:0)

控件特定于页面。要跨页面共享它,请将其放在UserControl中,然后通过UserControl的公共属性公开它。

答案 2 :(得分:0)

如果您的意思是连接字符串,答案是肯定的。您可以将它放在公共共享类中。

如果您的意思是在多个页面中打开连接。否。

您应该始终关闭连接以避免内存泄漏。