【问题标题】:ASP.net master page/content page simple design problemASP.net母版页/内容页简单设计问题
【发布时间】:2011-07-19 04:38:31
【问题描述】:

我的母版页:

public partial class MasterPages_Main : System.Web.UI.MasterPage
{
    public bool IsLoggedIn;

    protected void Page_Load(object sender, EventArgs e)
    {

        // Check login
        LoggedInUser ThisUser = new LoggedInUser();
        IsLoggedIn = ThisUser.IsLoggedIn;

        Response.Write("Master" + IsLoggedIn.ToString());

    }

这输出'True',我们已登录。

在我的内容页面上:

protected void Page_Load(object sender, EventArgs e)
{

    Response.Write("CONTENT:" + Master.IsLoggedIn.ToString());
}

但这会输出“假”。

所以实际的页面输出是:

Content:False
Master:True

在我的内容页面上,如果用户已登录,我需要重定向,但从内容页面的角度来看,此值始终为 false!我该如何解决这个问题?

【问题讨论】:

  • 已解决,将 master 更改为 page_init 有效。

标签: c# asp.net master-pages public content-pages


【解决方案1】:

内容页面加载事件发生在主加载之前(来自here)。所以你可能需要改变逻辑,也许从主Page_Load 调用一些内容页面的方法。或者在 Master Init 事件处理程序中设置 IsLoggedIn

【讨论】:

  • 谢谢,init 没有工作,因为它对其他一些逻辑做了同样的事情,但是模块化它并将一些逻辑放入主函数中似乎已经解决了这个问题。
【解决方案2】:

将 Master Page_Load 更改为 Page_Init,这将强制它在内容页面之前执行。

【讨论】:

    【解决方案3】:

    在您的 Page_Load() 代码之后调用母版页。试试这个:

    Protected void Page_Load(object sender, EventArgs e)
    {
        base.Page_Load(sender,e); 
        Response.Write("CONTENT:" + Master.IsLoggedIn.ToString());
    }
    

    【讨论】:

    • 如果它从未被调用,那么它当前如何输出Master:True
    • 对不起,这不起作用。我也认为它正在加载,因为它一切正常,但它只是以错误的顺序加载
    • 将母版 page_load 更改为 page_init 似乎会强制它首先加载,这是可行的。
    • 正确代码见上文。默认情况是 base.Page_Load 在你继承的 Page_Load() 之后被调用——上面的代码将解决这个问题。
    • 是的,Page_Init 在页面生命周期中在 Page_Load 之前调用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-08
    • 2011-04-08
    • 1970-01-01
    • 1970-01-01
    • 2011-01-24
    • 1970-01-01
    • 2010-09-15
    相关资源
    最近更新 更多