C# 母版页中的页面加载在Page.pageload之后访问

C# 母版页中的页面加载在Page.pageload之后访问,c#,asp.net,controls,master-pages,page-lifecycle,C#,Asp.net,Controls,Master Pages,Page Lifecycle,我在母版页和子页中都有一些标签。所有这些标签中的值都来自一个单数据库查询。我想运行此查询一次,以便填充主数据库和子数据库中的标签。有办法吗 这是我问题的最简化版本 下面是我如何在母版页的页面加载中初始化公共属性(我使用viewstate,以便其他方法也可以使用这些属性) 页面加载中的属性如下所示 public Meeting1 Meeting { set { ViewState["Meeting"] = value; } get {

我在母版页和子页中都有一些标签。所有这些标签中的值都来自一个单数据库查询。我想运行此查询一次,以便填充主数据库和子数据库中的标签。有办法吗

这是我问题的最简化版本

下面是我如何在母版页的页面加载中初始化公共属性(我使用viewstate,以便其他方法也可以使用这些属性)

页面加载中的属性如下所示

 public Meeting1 Meeting
{
    set
    {
        ViewState["Meeting"] = value;
    }
    get
    {
        if (ViewState["Meeting"] != null)
            return (Meeting1)ViewState["Meeting"];
        else
            return null;
    }
} private int meetingID = -1;
public int MeetingID
{
    get
    {
        if (meetingID == -1)
            try
            {
                meetingID = int.Parse(Request.QueryString["meetingID"]);
            }
            catch (Exception)
            {
                Response.Redirect("~/Main.aspx");

            }
        return meetingID;
    }
}
现在在我的子页面中

protected void Page_Load(object sender, EventArgs e)
{        
    if (IsPostBack)
        return;       
    DataBindControls();
}
  private void DataBindControls()
{
    tbMeetingTitle.DataBind();            
}
Meeting.aspx页面如下所示

  <tr>
        <td>Meeting Title</td>
        <td colspan="3">
            <asp:TextBox ID="tbMeetingTitle" runat="server" Width="714px" Text='<%# GetData("MeetingTitle") %>' AutoPostBack="true" ></asp:TextBox></td>

    </tr>

会议名称

我希望现在我的问题清楚了

否,您不能更改顺序,但有一种方法可以在子页面中指定强类型模型,或者您可以在子页面中执行强制转换以引用母版页的任何公共属性。

否无法执行此操作。不过,顺便提一下,你的问题并不清楚。据我所知,您面临一些性能问题。我建议审查你的应用程序设计。运用接球等练习。下面的链接在我使用asp.net应用程序时很有帮助


您想要这样做的事实意味着您的设计中存在更深层次的问题。您应该尽量少用viewstate(如果有的话)。为什么需要在每个页面上运行一个查询?除了母版页的页面加载之外,还有许多函数使用这些属性。因此,我必须在属性中使用viewstate。第二,我在主页上快速跳转,在每一个新的选择上加载新的会议。因此,我需要运行query Meeting=bal.GetMeetingByID(MeetingID)[0]//在母版页的每次加载上进行DB查询这是一个。你问的是你心目中的解决方案,而不是描述问题。如果出于某种原因,您需要为每个页面加载查询,那么有更好的位置。您可以使用
global.asax
中的函数在每个请求的开头运行查询。或者,您可以将查询放在其他所有页面继承的基本页中,从而将查询放在生活方式的前面。如果我包含Meeting=bal.GetMeetingByID(MeetingID)[0]//在子页面的页面加载中使用DB查询,但该查询会被调用两次…您确定页面上没有图像标记、脚本标记或类似的东西,而您没有设置src属性,这会使页面多次尝试并呈现自身吗?img、脚本和我相信的链接标记将导致客户端再次请求页面用作其源,这将失败,但如果页面位于不清楚的位置,您可能不会注意到它失败。查询会被调用两次,一次在子页面,一次在母版页。因为我必须使用此查询在母版页中设置一些标签。我想问的是,有没有一种方法可以让我运行这个查询一次,母版页和子版页中的标签都得到值。当然可以。在母版页中创建属性,并始终从两个位置调用该属性。在属性get中,如果支持字段为null,则运行查询并将支持字段设置为结果。然后返回支持属性。
  <tr>
        <td>Meeting Title</td>
        <td colspan="3">
            <asp:TextBox ID="tbMeetingTitle" runat="server" Width="714px" Text='<%# GetData("MeetingTitle") %>' AutoPostBack="true" ></asp:TextBox></td>

    </tr>