0

所以这是场景:

我有一个所有登录控制页面的基类:

public class SessionControlledPage : Page
{
    protected virtual void Page_Load(Object sender, EventArgs e)
    {
        Response.AddHeader("Refresh", Convert.ToString(Session.Timeout * 60 + 5));
        if (Session.IsNewSession)
        {
            Response.Redirect("~/login.aspx");
        }
    }
}

还有一个regularpage.aspx从基类继承的页面:

public partial class RegularPage : SessionControlledPage
{
    override protected void Page_Load(Object sender, EventArgs e)
    {
        base.Page_Load(sender, e);

        Server.Transfer("~/otherpage.aspx");
    }
}

现在假设原始 URL 是http://localhost/regularpage.aspxSession.Timeout = 5. 传输发生后发生刷新时会出现问题。我收到一个错误,并且http://localhost/305404 Not Found的 URL 发生了变化。请注意.5 * 60 + 5 = 305

你知道为什么会这样吗?有解决办法吗?

PD:我使用transfer是因为我需要访问otherpage.aspx上的regularpage.aspx的一些属性,也许你也可以为此提供另一种解决方案。

4

1 回答 1

1

如果您要做的只是调用 Server.Transfer,那么调用 base.Page_Load 的理由非常少。你到底想完成什么?如果您只是访问一些属性,则需要将其抽象为一些不依赖于 Page 对象的业务逻辑。

这也是导致 404 问题的原因......要发生这种情况,问题必须在页面的渲染输出中(检查出来)。似乎您在元刷新标记之后立即切断一页,然后开始一个新页面,而 ASP.NET 只是将其全部转储到同一个响应流中。简而言之,你做错了。:) 你也许可以用一个合适的 Response.Clear() 来解决这个问题,但这不是这里真正的问题......而且你会丢失你的刷新标签。

于 2010-03-16T21:56:41.610 回答