【问题标题】:Page load in Masterpage is accessed later than page.pageload [closed]母版页中的页面加载晚于 page.page 加载 [关闭]
【发布时间】:2015-03-17 14:31:02
【问题描述】:

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

这是我的问题最简化的版本

这里是我如何初始化母版页的page_load中的公共属性(我使用viewstate以便其他方法也可以使用这些属性)

 protected void Page_Load(object sender, EventArgs e)
{
Meeting = bal.GetMeetingByID(MeetingID)[0];//DB QUERY

}

页面加载中的属性如下

 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>

我希望现在我的问题很清楚。

【问题讨论】:

  • 您想要这样做的事实意味着您的设计中存在更深层次的问题。您应该仅谨慎使用视图状态(如果有的话)。为什么需要在每一页上运行一个查询?
  • 除了masterpage的page_load之外,还有很多函数使用了这些属性。因此我必须在属性中使用视图状态。其次,我在主页上快速跳转,每个新选择都会加载新会议。因此,我需要在每次加载母版页时运行查询 Meeting = bal.GetMeetingByID(MeetingID)[0];//DB QUERY
  • 这是XY Problem。您询问了您想到的解决方案,而不是描述问题。如果由于某种原因您需要为每个页面加载查询,那么有更好的位置。您可以使用global.asax 中的函数在每个请求的开头运行查询。或者,您可以通过将查询放在所有其他页面继承的基本页面中,将查询放在生活方式的早期。

标签: c# asp.net controls master-pages page-lifecycle


【解决方案1】:

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

【讨论】:

  • 如果我在子页面的页面加载中包含 Meeting = bal.GetMeetingByID(MeetingID)[0];//DB QUERY 但随后此查询被调用两次 ...
  • 你确定你没有在页面上没有设置 src 属性的图像标签或脚本标签或类似的东西,这使得页面尝试多次呈现自己?一个img、脚本和我相信链接标签会导致客户端再次请求页面作为它的源,这会失败,但如果它在一个不起眼的地方你可能不会注意到它失败。
  • 查询在子页面中调用两次,在母版页面中调用一次。因为我必须使用此查询在母版页中设置一些标签。我要问的是,如果我可以运行一次此查询,并且母版页和子页中的标签都可以获取值,那么有没有办法。
  • 当然可以。在母版页中创建一个属性,并始终从两个位置调用它。在属性 get 中,如果支持字段为空,则运行查询并将支持字段设置为结果。然后返回支持属性。
【解决方案2】:

不,这是不可能的。但是,在旁注中,您的问题尚不清楚。据我了解,您面临一些性能问题。我建议审查您的应用程序设计。应用诸如捕捉之类的做法。以下链接在我处理 asp.net 应用程序时有所帮助

http://www.codeproject.com/Articles/23306/ASP-NET-Performance-and-Scalability-Secrets

【讨论】:

    猜你喜欢
    • 2016-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-19
    • 1970-01-01
    相关资源
    最近更新 更多