【问题标题】:Is SqlDataSource can be shared across different aspx page?SqlDataSource 可以跨不同的aspx页面共享吗?
【发布时间】:2011-08-05 18:16:56
【问题描述】:

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

谢谢

【问题讨论】:

    标签: asp.net sqldatasource


    【解决方案1】:

    当然。如果您真的是指共享,因为所有页面都使用相同的 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

    【讨论】:

    • 感谢您的回答。对于您的第一个选项,我在母版页上创建了 sqldatasource,但我如何将其公开为母版的属性?
    • 没关系,我知道了,我总是将 sqldatasource 添加到标记页面,所以永远不要考虑在代码中创建并共享它。感谢您的大力帮助
    • @sketch - 谢谢 - 很高兴你自己想通了 - 正在给你一个可靠的例子,所以我想我会为其他人完成......祝你好运你的项目。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      如果你指的是连接字符串,答案是肯定的。你可以把它放在一个公开的共享类中。

      如果您的意思是连接在多个页面期间处于打开状态。没有。

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

      【讨论】:

        猜你喜欢
        • 2013-08-25
        • 1970-01-01
        • 1970-01-01
        • 2018-10-27
        • 2012-07-06
        • 2021-05-21
        • 2011-07-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多